我与实体创建了 @OneToMany 关系。
例如,成员
和地址
。这两个由 Mem_Addr
表连接起来。
当我部署应用程序时,日志显示:
EntityBinder I org.hibernate.cfg.annotations.EntityBinder bindTable Bind entity Address on table ADDRESS
但是该表在数据库中不存在。不知道这是怎么发生的?!?!
其次,Hibernate 查询(从日志)拉取成员,预计也会显示地址查询。但查询不包含 Address/Mem_addr 表。它只是单独拉成员,忽略地址,尽管@OneToMany注释。
有什么想法吗? Hibernate 是否会智能地识别不存在的表并且不在查询中包含该表?
编辑为了清晰起见进行了更新。
最佳答案
我有一段时间没有使用 Hibernate,但我记得您必须准确告诉 Hibernate 您希望它如何运行。换句话说,在注释中,您需要准确指定您希望如何加载记录。您可能想阅读OneToMany注释。
从我的头脑中你需要:
@Entity
public class Member {
private Set<Address> addresses = new HashSet<Address>();
@Id
...
@OneToMany
@JoinTable(
name="MEM_ADDR",
joinColumns = @JoinColumn( name="MEMBER_ID"),
inverseJoinColumns = @JoinColumn( name="ADDRESS_ID")
)
public Set<Part> getAddresses() { return addresses; }
...
}
@Entity
public class Address {
...
}
编辑:解决急切加载与延迟加载的问题
仅供引用,您可以在 @OneToMany 注释中强制预先加载,因为默认为 Lazy
@OneToMany(fetch=FetchType.EAGER)
希望有帮助。
关于java - Hibernate 生成的查询 - 不存在的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027525/