- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个具有组合主键的实体:
@Entity
@IdClass(APK.class)
public class A {
@Id
Integer pk1;
@Id
Integer pk2;
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER,mappedBy="a")
List<B> b = new ArrayList<B>();
String name;
...
}
@Entity
@IdClass(BPK.class)
public class B {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "pk1", referencedColumnName = "pk1"),
@JoinColumn(name = "pk2", referencedColumnName = "pk2")
})
@Id
private A a;
@Id
Integer additional_key_part;
}
当我加载“A”类时,急切地正确加载了列表,问题是,当我加载“B”类时它不起作用。
“B”类将正确使用与 A 的连接,但只会填充 A 的 PK 字段(pk1、pk2),而不填充其余部分。
真正的问题出现在将实体发送到没有事务的客户端时,因此无法延迟加载。似乎唯一可行的方法是在关闭事务之前调用 a.getName() 或其他方法来启动延迟加载,但这似乎并不是真正正确的方法。
那么,如何确保实体及其所有子实体都已加载?
最佳答案
尝试将注释更改为以下内容:
@Entity
@IdClass(ClassBPK.class)
public class ClassB {
@Id
private Integer pk1;
@Id
private Integer pk2;
@ManyToOne(fetch = FetchType.EAGER)
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name = "pk1", referencedColumnName = "pk1"),
@PrimaryKeyJoinColumn(name = "pk2", referencedColumnName = "pk2")
})
private ClassA a;
@Id
private Integer pk3;
//...
}
我使用 Derby 和草稿 DAO 类对 OpenJPA 1.2.2 进行快速检查:
logger.debug("Pre find");
ClassB b = bDAOBean.findById(bId);
logger.debug("Post find");
logger.debug("A's name: {}", b.getA().getName());
我得到了:
[DEBUG] Pre find
[INFO ] openjpa.Runtime - Starting OpenJPA 1.2.2 {main}
// ... Here comes SQL from loading the entity
[DEBUG] Post-find
[DEBUG] A's name: nameA11
最后两行日志之间没有OpenJPA日志,证明整个ClassA被急切加载。
关于java - 如何强制 OpenJPA (1.2.2) 急切加载 @ManyToOne 组合主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7273046/
我有一个案例,在大多数情况下,对象之间的关系是这样的,因此在关系上预先配置一个渴望(加入)的负载是有意义的。但是现在我遇到了一种情况,我真的不想完成急切的加载。 我是否应该从关系中删除连接负载并将所有
在我的 Grails 项目中,我有以下类: class A { static hasMany = [cs:C] } class B { static hasMany = [cs:C]
想象一下以下简化的 DI 模型: @ApplicationScoped public class A { private B b; @Inject public A(B b)
我使用 MapLoader 将数据从数据存储初始加载到 Hazelcast (InitialLoadMode = EAGER)。我需要从一个物化 View 中加载这些数据,该 View 是为了在加载过
我使用 Hibernate Envers 4.3.10.Final。我有以下两个 JPA 类: public class Factory { private int factoryID;
EJB 似乎被延迟加载 - 每当访问时。 但是,我想急切地初始化它们 - 即每当容器启动时。这是如何实现的(尤其是在 JBoss 中) This topic给出了一些提示,但不是很令人满意。 最佳答案
我是一名优秀的程序员,十分优秀!