Spring JPA-具有相同ID的不同实体

时间:2018-09-04 15:20:25

标签: java spring hibernate spring-data-jpa

我有两个实体

@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> {

1 个答案:

答案 0 :(得分:0)

睡一晚总是有帮助的。...对我最初的不完整问题表示抱歉。

问题/错误是两个实体都扩展了相同的抽象类。在这个抽象类中,标识是定义的。

此识别后很容易修复。实体之一不会扩展我的抽象类,但会定义自己的ID。现在它可以工作了……