【发布时间】: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 ,现在我更加困惑了
【问题讨论】:
-
检查注解
Entity和Table是否来自jpa包。 -
它们都来自javax.persistence,如果是错误的注解插入也不行?
标签: java hibernate spring-boot jpa