【问题标题】:Spring Jpa inheritance type joined select only baseclassSpring Jpa 继承类型加入 select only 基类
【发布时间】:2019-03-22 12:28:00
【问题描述】:

我遇到了仅选择基类的问题,无法找到解决方案。 我也总是得到子类,而不仅仅是基类。

假设我有基类

@Entity
@Inheritance(strategy = InheritanceType.JOINED)   
public class BaseClass {
  @Id
  @GeneratedValue
  private Long id;
  private Date date;
  // some fields
}

现在我继承了

@Entity  
public class SubClassA extends BaseClass {
  // some fields
}
interface BaseClassRep extends JpaRepository<BaseClass,Long>{
  @Query(nativeQuery = true, value = "select id,date from baseclass where date = ?1")
  public BaseClass getByDate(Date date)
}

问题是 BaseClassRep 不仅返回 BaseClass,还返回 SubClassA 以及从 BaseClass 继承的所有其他子类。

如何告诉 Hibernate 我真的只想要基类而不是子类。

【问题讨论】:

标签: java spring hibernate jpa spring-data-jpa


【解决方案1】:

你可以使用类型运算符。 请看下面的链接

How do I query for only superclass entities in a jpql query?

或(Java /JPA | Query with specified inherited type)

select id,date from baseclass b where date = ?1 and b.class = ?2

【讨论】:

  • 它总是创建奇怪的长 SQL。我尝试了 1) 扩展 JpaRepository 并在注释 @Query 中使用本机查询 2) 使用 EntityManager - 即使我再次尝试使用本机查询,结果也相同 所以我决定降低并使用 jdbcTemplate。所以我的 SQL 语句实际上是以我想要的格式执行的,只返回基类中的 collums,没有别的
【解决方案2】:

我认为你必须使用 TABLE_PER_CLASS 继承类型:

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) ,然后为超类创建一个存储库并获取数据。

【讨论】:

    猜你喜欢
    • 2015-08-31
    • 2013-12-04
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多