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

标签 java sql hibernate logging entity

我与实体创建了 @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/

相关文章:

java - 为什么我的计划作业没有并行执行

java - Hibernate HQL 是否支持别名子查询?

java - 如何使用java appium客户端在android中滚动?

java - Eclipse 中的 exec-maven-plugin :1. 2.1

java - 增量运算符在 Java 中的行为如何?

mysql - 如何使 Fanbatis @Column 注释将 Fantom 类属性正确映射到数据库列?

sql - 对不同表中的每个值的列求和

c# - 为什么 DataReader 给出 "Enumeration Yielded No Results"?

java - 单击进度对话框按钮后如何关闭 Activity

java - Flyway + h2内存数据库+ hibernate +测试导致表不存在