JpaRepository:当实体组成id时,findBy不起作用

时间:2017-04-01 22:55:56

标签: spring spring-boot spring-data-jpa

在我的春季启动应用中,我有实体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]

1 个答案:

答案 0 :(得分:0)

不确定它是否是拼写错误,但您从您定义的ID类引用了存储库声明中的其他ID类:

public interface RouteRepository  extends JpaRepository<EntA, EntAKey> 

public class EntAId implements Serializable

但是,您仍然可以拨打savefindOne这一事实表明您的问题可能有拼写错误,但您的实际代码还可以。

您确定要将姓名传递给findByName吗?您可以在此方法签名上放置一个断点来验证...