【问题标题】:hibernate adds prefix to table name and thus cannot find ithibernate 为表名添加前缀,因此找不到它
【发布时间】:2018-09-02 15:54:45
【问题描述】:

我有用户实体,以下代码包含我面临的问题的重要内容(所以我省略了一些内容)

@Entity
@Table(name="user")
public class User {
    private List<UserGroupInvite> invites;
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    public List<UserGroupInvite> getInvites() { return invites; }
    public void setInvites(List<UserGroupInvite> invites) { this.invites = invites; }
}

和 UserGroupInvite 实体:

@Entity
@Table(name = "user_group_invite")
    public class UserGroupInvite implements Serializable {
        private User user;
        @Id
        @ManyToOne
        @JoinColumn(name="user_id") // in DB the row is called user_id
        @MapsId
        public User getUser() {
            return user;
        }

        public void setUser(User user) {
            this.user = user;
        }
    }

但是,当我从数据库中检索用户并调用时:

user.getInvites().get(0).getSomePropertyOfInviteIhaveOmitted()

hibernate 抱怨:

表 'databasename.user_user_group_invite' 不存在

为什么要寻找 user_user_group_invite 而不是 databasename.user_group_invite

在我的 hibernate-cfg.xml 中我已经定义了

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <mapping class="com.project.model.User" />
    <mapping class="com.project.model.UserGroupInvite" />
  </session-factory>
</hibernate-configuration>

但它正在寻找错误的名称。

但是当我尝试插入 user_group_invite 表时它可以工作。那么为什么hibernate会这样呢?

感谢您的帮助!

//编辑

现在我意识到插入也适用于表 databasename.user_user_group_invite,但是当我删除 fetch = FetchType.EAGER 时它开始工作,为什么会这样?我已经添加了 fetch = FetchType.EAGER ,现在我更加困惑了

【问题讨论】:

  • 检查注解EntityTable是否来自jpa包。
  • 它们都来自javax.persistence,如果是错误的注解插入也不行?

标签: java hibernate spring-boot jpa


【解决方案1】:

首先,javax.persistence 应该是正确的导入——不要改变它。

second,尝试删除类定义上方的@Table 注解。如果我没记错的话,hibernate 会自己生成数据库,并且没有硬编码的表名,系统可能更容易找到它离开的所有内容。

如果以上所有方法都不起作用,请尝试保留这些更改,但现在 - 将 hibernate 重定向到新的数据库文件。我在尝试更改现有数据库时遇到了一些问题。 如果您使用 spring,请使用指向新文件的新地址定义“数据源”,从而让 hibernate 使用我上面的建议从头开始创建数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 2018-08-09
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    相关资源
    最近更新 更多