Java 是否可以使用一个存储库来选择不同表中的子类?
我想使用一个存储库从不同的表中选择实体。 我使用Spring数据JPA,并有自己的查询方法:Java 是否可以使用一个存储库来选择不同表中的子类?,java,jpa,spring-data-jpa,jpa-2.0,Java,Jpa,Spring Data Jpa,Jpa 2.0,我想使用一个存储库从不同的表中选择实体。 我使用Spring数据JPA,并有自己的查询方法: @Query(value = "SELECT * FROM ?=1 WHERE ref_id=?2", nativeQuery = true) BaseEntity findByRefId(String tableName, Long refId); 第一个问题,是否可以通过某种方式传递表名?因为现在我正在对表名进行编码 接下来我有两个子类EntityOne和EntityTwo。它们的字段列与Base
@Query(value = "SELECT * FROM ?=1 WHERE ref_id=?2", nativeQuery = true)
BaseEntity findByRefId(String tableName, Long refId);
第一个问题,是否可以通过某种方式传递表名?因为现在我正在对表名进行编码
接下来我有两个子类EntityOne和EntityTwo。它们的字段列与BaseEntity相同,但必须位于不同的表中
@MappedSuperclass // or @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) and @Entity
BaseEntity
|
@Entity
EntityOne
|
@Entity
EntityTwo
我已经尝试对BaseEntity使用@MappedSuperclass注释。但它不起作用,我得到一个例外,BaseEntity必须被注释为@Entity。
此外,我还尝试将BaseEntity注释为@Entity和@InheritanceSenategy=InheritanceType.TABLE\u PER\u类,但我得到了SQLException:未找到列“clazz\u”。我甚至没有那个专栏。来自spring文档
请看示例2.12
您可以使用SpEL执行此操作:
@Query("select t from #{#entityName} t where t.attribute = ?1")
List<T> findAllByAttribute(String attribute);
你为什么要这么做?这不是Spring数据的概念:保存数据很有效。但我需要使用自己的查询进行选择。为什么?我的意思是,每个实体都有一个存储库是一个很好的概念,如果BaseEntity是一个实体而不是MappedSuperclass,您可以这样做。尝试此操作时出现的错误是因为您使用的是本机查询。进一步见: