gpt4 book ai didi

java - Spring data JPA存储库返回父类的实体

转载 作者:行者123 更新时间:2023-12-02 10:31:21 28 4
gpt4 key购买 nike

我对 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;
}

我还有两个简单的接口(interface),它们扩展了 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 中它存在具有相同的 ID 100% 肯定。如果在调试中我写

BRepository.getOne(a.getId());

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

我如何才能按照我的需要进行这项工作?我认为这个问题出在一些 hibernate 管理的缓存之类的地方。我还尝试更改 equals 和 hashcode,如本例 http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#identifiers-composite-associations 所示但运气不好,问题仍然存在。

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

最佳答案

好的,我找到了问题原因。这是之前在交易中查询的。 JOOK用于创建递归sql请求,并使用hibernate将此请求映射到实体。由于实体具有映射继承性,我必须在请求中添加硬编码 0 的“clazz_”字段,在此请求之后,所有实体都以某种方式缓存在第一个 lvl hibernate 缓存中,然后无法从数据库重新请求。我添加到我的 JOOK

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

现在一切都按预期工作

关于java - Spring data JPA存储库返回父类的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53593825/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com