我有两个实体
@Entity
@Table(name = "view_a")
public class A extends BaseStringIdTableClass
@Entity
@Table(name = "view_b")
public class B extends BaseStringIdTableClass
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseStringIdTableClass implements Serializable {
@Id
private String id;
在数据库中,我有两个视图
select * from view_a
|ID|ColumnA|....
|34222|some Value|....
select * from view_b
|ID|ColumnB|...
|34222|lla lla|...
因此,我在数据库中有不同的视图。但是这些不同视图中的行具有相同的ID。
现在,我尝试读取具有标准CRUD存储库的实体。
A a = aRepository.findById("34222").get();
B b = bRepository.findById("34222").get();
在这种情况下,我找不到实体b。如果我扫过两行代码,我将找不到实体a。
我认为持久性上下文一次只能包含一个实体的特定ID?这是正确的吗。我该怎么办?
存储库定义
public interface ARepository extends JpaRepository<A, String>, QuerydslPredicateExecutor<A> {
public interface BRepository extends JpaRepository<B, String>, QuerydslPredicateExecutor<B> {
答案 0 :(得分:0)
睡一晚总是有帮助的。...对我最初的不完整问题表示抱歉。
问题/错误是两个实体都扩展了相同的抽象类。在这个抽象类中,标识是定义的。
此识别后很容易修复。实体之一不会扩展我的抽象类,但会定义自己的ID。现在它可以工作了……