我与实体创建了@OneToMany关系。
例如,Member
和Address
。这两个由Mem_Addr
表连接。
部署应用程序时,日志显示:
EntityBinder I org.hibernate.cfg.annotations.EntityBinder bindTable Bind entity Address on table ADDRESS
但该表并不存在于数据库中..不确定这是怎么发生的?!?!
其次,Hibernate查询(来自Log)拉成员,这也有望显示地址查询。但查询没有包含Address / Mem_addr表。尽管@OneToMany注释,它只是单独拉动成员,忽略了地址。
有什么想法吗? Hibernate是否智能地识别表的不存在,并且不在查询中包含该表?
为了清晰起见,修改已更新。
答案 0 :(得分:1)
我暂时没有使用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(取= FetchType.EAGER)
希望有所帮助。
答案 1 :(得分:0)
好。这就是我想到的。虽然在deploymnet期间,它表示Entity绑定到表,但我猜它没有。
但是由于依赖项是Lazy加载的,因此只有在使用/请求依赖项时才会生成带有依赖项的查询。这就是它抛出表不存在的错误。
我认为它会在绑定时间内抛出错误。但事实并非如此,至少在我的情况下。