java - Spring 数据JPA : find by column of custom class type's member

标签 java spring jpa spring-data-jpa

我有一个实体 Person,它有一个属性 Name。名称未标记为实体。对于 Name 类,我有一个 AttributeConverter,它通过名字和姓氏的字符串连接来创建全名。因此,对于 person 实体,列名的类型为 String。

@Entity
public class Person {
    // ...  
@Convert(converter = NameAttributeConverter.class)
@Column

private Name name;
    // ...
}

public final class Name implements Comparable, Serializable {
      // ...
      private String firstName;
      private String lastName;
      // ...
}

这有效。但现在我想扩展我的个人存储库。我想通过她的姓氏来查找人员。但是

List<Person> findByName_LastName(String lastName);

List<Person> findByNameLastName(String lastName);

不起作用。我收到以下异常:

PersonRepository.findByName_LastName(java.lang.String)! Illegal attempt to dereference path source [null.name] of basic type

如何解决这个问题?感谢和问候

编辑:

public interface PersonRepository extends CrudRepository<Person, Long>{
    // The repository works without the findByName...
    // List<Person> findByName_LastName(String lastName);
}

最佳答案

这不适用于查询派生,并且它无法工作,因为一般情况下以及在您的情况下,转换所应用的函数是不可逆的。这意味着为了让 Spring Data 实现这一点,它需要分析转换,将其反转,即创建一组函数,从存储在数据库中的连接字符串中生成名字和姓氏,并使用 Criteria 来实现它API。我认为这显然是不可能做到的。

如果您知道应该执行什么查询,请使用@Query注释。

更好的解决方案是将姓氏存储在单独的列中,以便可以轻松访问。

如果

关于java - Spring 数据JPA : find by column of custom class type's member,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61054549/

相关文章:

java - 如何确保我的图像不会在 JFrame 之外绘制?

java - 使用 AlarmManager 每天在特定时间轮询用户位置

java - 如何将 txt 文件读入二维数组 Java

java - Spring rabbitmq 如何在错误处理程序上手动确认,在抛出特定的必需异常时,它仅在 Acknowledge 设置为 AUTO 时确认

xml - 如何在Spring XML中为Apache Camel的FlexibleAggregationStrategy设置“选择”表达式?

hibernate - Tomcat 忽略 persistence.xml

Java JPA/Hibernate 反模式

java - Guava null 测试器不断抛出错误

java - 将 Java 泛型用于带有 WHERE 子句的 JPA findAll() 查询

spring - 为什么 beans 会被拒绝以及未识别出 URL 路径意味着什么?