[英]Java hibernate get all Entities
我有兩個Java Hibernate
實體user
和userPick
:
@Entity
@Table(name="users")
public class User{
@Column(length=50)
private String name;
@OneToMany
private List<UserPick> userPicks = new ArrayList<UserPick>(0);
...
和
@Entity
@Table(name="usersPicks")
public class UserPick {
...
User user; // this line no exist in code
// I want get it when load all picks
// I am confused here or I can do it, because in user is
// List<userPick> and it sounds like circle
// user.getUserPicks().getUser().getUserPicks()....
...
當我加載用戶一切正常。
public User findByUserName(String name) {
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("name",name));
List<User> users = criteria.list();
if (users.size() > 0) {
return users.get(0);
} else {
return null;
}
}
但是,我看這樣我怎么能得到所有usersPick's
一個列表,並獲得選秀權的用戶,是這樣的:
public List<UserPick> getAllPicks(){
Criteria criteria = session.createCriteria(UserPick.class);
List<UserPick> picks = criteria.list();
return picks;
}
我想打印選擇用戶名System.out.print(picks.get(0).getUser().getName())
可以在UserPick
中與User
建立關聯。 關聯User
和UserPick
外鍵fk_user
在UserPick
,請添加mappedBy = "user"
到User
,並關聯User
的懶惰UserPick
。 要指定外鍵列名稱,您需要@JoinnColumn(name = "fk_user")
。
@Entity
@Table(name="users")
public class User{
@Column(length=50)
private String name;
@OneToMany(mappedBy = "user")
private List<UserPick> userPicks = new ArrayList<UserPick>();
}
@Entity
@Table(name="usersPicks")
public class UserPick {
@ManyToOne(fetch = FetchType.LAZY)
@JoinnColumn(name = "fk_user")
private User user;
}
而且,您可以通過@StanislavL建議的方式來獲取用戶(除非您不需要為user
創建別名)
public List<UserPick> getAllPicks(){
Criteria criteria = session.createCriteria(UserPick.class)
.setFetchMode("user", FetchMode.JOIN);
return criteria.list();
}
即使UserPick
中與User
的關聯不是惰性的,這也不是問題,因為Hibernate使用緩存將同一User
設置為所有用戶的UserPick
。
criteria.setFetchMode("user", FetchMode.JOIN)
.createAlias("user", "user")
FetchMode.JOIN應該解決n + 1個查詢問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.