在我的春季启动应用中,我有实体EntA 和存储库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而且一切正常,但我最近添加了编译id ,并且在调用findByName(String name)方法时我开始获得 NPE。< / p>
(我仍然可以毫无问题地调用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]
答案 0 :(得分:0)
不确定它是否是拼写错误,但您从您定义的ID类引用了存储库声明中的其他ID类:
public interface RouteRepository extends JpaRepository<EntA, EntAKey>
public class EntAId implements Serializable
但是,您仍然可以拨打save
和findOne
这一事实表明您的问题可能有拼写错误,但您的实际代码还可以。
您确定要将姓名传递给findByName
吗?您可以在此方法签名上放置一个断点来验证...