Hibernate JPA 问题有时不适用 table 的 IS-A 关系
Hibernate JPA issue doesnt apply IS-A Relationship of table at some times
我有一个父表 Table A 和扩展的子表 B 和 C
例如:
public class A {
private Long id;
//getters setters//
}
public class B extends A{
private String name;
//getters setters//
}
现在在我的存储库中,
public interface B extends JpaRepository<B, Long> {
@Query("select a from A a")//--This works
B getAll()
@Query("select a.id, b.name from A a join a.B b")//-- This doesn't
B getSpecificCols()
}
我需要一个解释,因为 "B is an A" 这就是 getAll() 起作用的原因
为什么 getSpecificCols() 不起作用?
错误是
java.lang.ClassCastException: java.lang.Long cannot be cast to <package>.B
顺便说一句,我正在使用 Hibernate Spring
查询 return 是一个长整数 (a.id) 和一个字符串 (b.name)。该界面假定您 return 一个实体 (B)。 returned id 不能转换成 B,所以你得到一个 ClassCastException
。如果您想要单独的字段,您可以 return List<Object[]>
,其中每条记录都是一个包含 ID 和名称的数组。或者您可以使用投影 (https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections).
顺便问一下,当数据库中存在不是 B 实体的 A 实体时,第一个查询是否真的有效,例如,如果 A 也有一个子 class C? select 基 class 和 return 派生 class 没有过滤看起来完全错误。我会 select 从 B 到 return B.
阅读文档后,我一直需要的是将构造函数放在我的 entity/table 中,您可以在其中放置所需的特定参数。
我有一个父表 Table A 和扩展的子表 B 和 C
例如:
public class A {
private Long id;
//getters setters//
}
public class B extends A{
private String name;
//getters setters//
}
现在在我的存储库中,
public interface B extends JpaRepository<B, Long> {
@Query("select a from A a")//--This works
B getAll()
@Query("select a.id, b.name from A a join a.B b")//-- This doesn't
B getSpecificCols()
}
我需要一个解释,因为 "B is an A" 这就是 getAll() 起作用的原因 为什么 getSpecificCols() 不起作用?
错误是
java.lang.ClassCastException: java.lang.Long cannot be cast to <package>.B
顺便说一句,我正在使用 Hibernate Spring
查询 return 是一个长整数 (a.id) 和一个字符串 (b.name)。该界面假定您 return 一个实体 (B)。 returned id 不能转换成 B,所以你得到一个 ClassCastException
。如果您想要单独的字段,您可以 return List<Object[]>
,其中每条记录都是一个包含 ID 和名称的数组。或者您可以使用投影 (https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections).
顺便问一下,当数据库中存在不是 B 实体的 A 实体时,第一个查询是否真的有效,例如,如果 A 也有一个子 class C? select 基 class 和 return 派生 class 没有过滤看起来完全错误。我会 select 从 B 到 return B.
阅读文档后,我一直需要的是将构造函数放在我的 entity/table 中,您可以在其中放置所需的特定参数。