У меня есть пользовательский объект, следующий код содержит важные вещи для проблемы, с которой я сталкиваюсь (поэтому я опускаю вещи)
@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()
Спящий режим жалуется:
Таблица '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, теперь я еще больше запутался