[英]Spring jpa repository returns the entity class instead of the dto interface
[英]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.