有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaHibernate将前缀添加到表名中,因此无法找到它

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

@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抱怨:

Table 'databasename.user_user_group_invite' doesn't exist

为什么它要寻找用户\用户\组\邀请,而不是数据库名。用户组邀请

在我的冬眠中。我定义的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>

但它正在寻找错误的名称

但是当我尝试插入到用户组邀请表时,它会工作。那么为什么hibernate的行为是这样的呢

谢谢你的帮助

//编辑

现在我意识到插入也会查找表databasename。用户\用户\组\邀请,但是当我删除fetch=FetchType时。急切的它开始工作了,为什么会发生这种情况?我添加了fetch=FetchType。迫不及待,现在我更糊涂了


共 (1) 个答案

  1. # 1 楼答案

    首先是javax。持久性应该是正确的导入-不要改变这一点

    第二步,尝试删除类定义上方的@Table注释。如果我没有弄错的话,hibernate将自己生成DB,并且没有硬编码的表名,系统可能更容易找到它留下的所有内容

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