Java Spring JPA-具有相同id的不同实体

Java Spring JPA-具有相同id的不同实体,java,spring,hibernate,spring-data-jpa,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 clas

我有两个实体

@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。如果我swop这两行代码,我就找不到实体a

我认为持久性上下文一次只能包含一个特定ID的实体?是这样吗。我能做什么

存储库定义

public interface ARepository extends JpaRepository<A, String>, QuerydslPredicateExecutor<A> {
public interface BRepository extends JpaRepository<B, String>, QuerydslPredicateExecutor<B> {
公共接口ARepository扩展了JpaRepository、QueryDSL谓词执行器{
公共接口BRepository扩展了JpaRepository、QueryDSL谓词执行器{

睡一晚总是有帮助的……首先,很抱歉我最初提出的问题不完整

问题/错误在于两个实体扩展了同一个抽象类。并且在这个抽象类中定义了ID


识别后的修复很容易。其中一个实体没有扩展我的抽象类,但定义了自己的id。现在它可以工作了……

我尝试……总是第二个调用(findById)抛出NoSuchElementException。如果我先调用aRepository.findById,它会找到一个实体。如果我先调用bRepository.findById,它会找到一个实体。你会用数据源配置更新你的问题吗?这将有助于理解你的问题。拥有两个具有不同类和相同ID的实体不是问题。其他的是g继续。请提供创建这两个实例的测试/简单应用程序的代码。将它们持久化并查询它们,从而导致异常。由于我正在读取数据库视图,因此没有任何内容可持久化。这两行是我的完整代码。如果使用Hibernate,请启用SQL跟踪,以查看每次查找执行的SQL。还要添加您在
aRepository
定义和/或存储库界面(如果有)上使用的任何注释