繁体   English   中英

Spring Data JPA存储库返回父类的实体

[英]Spring data JPA repository returns entity of parent class

我对spring数据和继承有奇怪的问题,我有两个类:

@Getter
@Setter
@Entity
@Table(name = "a")
@Inheritance(strategy = InheritanceType.JOINED)
public class A {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "a_id_gen")
  @SequenceGenerator(name = "a_id_gen", sequenceName = "a_id_seq", allocationSize = 50)
  @Column(name = "id")
  private Long id;
}

和B级

@Getter
@Setter
@Entity
@Table(name = "b")
public class B extends A {

@ManyToOne
@JoinColumn(name = "subject")
private Subject subject;
}

我也有两个简单的接口,像这样扩展JpaRepo:

public interface ARepository extends JpaRepository<A, Long>
public interface BRepository extends JpaRepository<B, Long>

然后在@Transactional中的代码中,我像这样使用它:

A a = ARepository.findOne(someId);
if (some checks here) {
    B b = BRepository.findOne(a.getId());
}

还有一个问题B在这里为NULL,但是在表b的DB中它以100%确定相同的ID存在。 如果在调试中我写

BRepository.getOne(a.getId());

它从ARepository返回实例A,与上面的实例A相同。

我如何才能根据需要进行这项工作? 我认为在某些休眠托管缓存中存在该问题。 我还尝试更改此示例中的等于和哈希码http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#identifiers-composite-associations,但是没有运气,问题仍然存在。

Hibernate版本是:5.0.12.Final Spring启动依赖项:1.5.6.RELEASE

好吧,我找出问题的原因。 它是在事务中更早查询的。 JOOK用于创建递归sql请求,并休眠以将该请求映射到实体。 由于实体具有映射的继承关系,因此我必须在硬编码为0的请求中添加“ clazz_”字段,此请求之后,所有实体都会以某种方式缓存在第一个lvl休眠缓存中,然后无法从DB重新请求。 我添加到我的JOOK

.select(when(B.ID.isNotNull(), 1).otherwise(0).as("clazz_"))

现在一切都按预期工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM