Hibernate生成的查询 - 不存在的表

时间:2014-09-24 22:21:27

标签: java sql hibernate logging entity

我与实体创建了@OneToMany关系。 例如,MemberAddress。这两个由Mem_Addr表连接。

部署应用程序时,日志显示:

 EntityBinder  I org.hibernate.cfg.annotations.EntityBinder bindTable Bind entity Address on table ADDRESS

但该表并不存在于数据库中..不确定这是怎么发生的?!?!

其次,Hibernate查询(来自Log)拉成员,这也有望显示地址查询。但查询没有包含Address / Mem_addr表。尽管@OneToMany注释,它只是单独拉动成员,忽略了地址。

有什么想法吗? Hibernate是否智能地识别表的不存在,并且不在查询中包含该表?

为了清晰起见,

修改已更新。

2 个答案:

答案 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加载的,因此只有在使用/请求依赖项时才会生成带有依赖项的查询。这就是它抛出表不存在的错误。

我认为它会在绑定时间内抛出错误。但事实并非如此,至少在我的情况下。