Java hibernate获取所有实体

标签 java hibernate

我有两个 Java Hibernate 实体 useruserPick:

@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 关联。要通过 UserPick 中的外键 fk_user 关联 UserUserPick,请添加 mappedBy = “user”User 并在 UserPick 中与 User 惰性关联。要指定外键列名称,您需要@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

关于Java hibernate获取所有实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013994/

相关文章:

java - 静态方法中的类实例是线程安全的

java - JBehave HTML 报告 - 如何显示运行了多少个故事

java - Spring 无法注入(inject)实体管理器工厂

java - 使用 Hibernate Criteria 自加入

java - Thymeleaf 使用路径变量到 :href

java - 无效的 Lambda 表达式

java - 我应该在类实现中使用 getter 和 setter 吗?

java - 该类没有定义 IdClass

hibernate - 来自 Hibernate Session 的 JPA 样式 Criteria/CriteriaBuilder 查询

java - Hibernate 给出 'table is not mapped' 异常