【发布时间】:2017-04-01 22:55:55
【问题描述】:
在我的 Spring Boot 应用程序中,我有 entity EntA 和 repository EntARepository。
@Entity
@IdClass(EntAId.class)
public class EntA implements Serializable {
@Id
private String idA;
@Id
private String idB;
private String name;
...
}
public class EntAId implements Serializable {
private String idA;
private String idB;
}
public interface RouteRepository extends JpaRepository<EntA, EntAKey> {
List<EntA> findByName(String name);
}
我在 EntA 中只有一个 id,一切正常,但我最近添加了 composed id,并且在调用 findByName(String name) 方法时开始得到 NPE。
(我仍然可以毫无问题地调用 save/findOne 方法。) 这是堆栈:java.lang.NullPointerException: null
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:347) ~[spring-orm-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at com.sun.proxy.$Proxy102.createQuery(Unknown Source) ~[na:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
【问题讨论】:
-
您在
EntAIdPK 类中覆盖了equals()和hashcode()吗? -
嗯,我做到了,但错误是一样的。
-
是否添加了默认的空构造函数?你有字段的getter/setter吗? stackoverflow.com/questions/31816468/…
-
是的,我有。我切换回简单的 id,我可以毫无问题地调用 findByName。看来复合 id 确实存在问题。
标签: spring spring-boot spring-data-jpa