首页 > 解决方案 > 我应该如何获得相关实体?

问题描述

我想了解如何在 Hibernate 中使用相关实体。有两个相关实体:

@Entity
@Table(name = "usr")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false)
    private String email;

    private boolean active;

    @Enumerated(EnumType.STRING)
    private Role role;

    @OneToMany(fetch = FetchType.LAZY, 
    mappedBy = "responsibleUser", cascade = CascadeType.ALL)
    private List<GrowBox> growBoxes;
    //def-constructor , getters, setters
}

@Entity
@Table(name = "growBoxes")
public class GrowBox {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @Column(nullable = false)
    private Integer length;

    @Column(nullable = false)
    private Integer width;

    @Column(nullable = false)
    private Integer height;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "responsibleGrowBox", cascade = CascadeType.ALL)
    private List<Plant> plants;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "activeGrowBox", cascade = CascadeType.ALL)
    private List<Sensor> sensors;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User responsibleUser;
    //def-constructor , getters, setters
}

我已经使用注释注册了映射。希望是正确的。我想按用户 ID 查找框,但不知道应该如何编写 HQL 查询。因为我的 Box 类中没有“user_id”字段。取而代之的是“用户负责用户”字段。像这样的事情是行不通的(不应该)

@Autowired
SessionFactory sessionFactory;

@Override
public List<GrowBox> findByUser(Long userId) {

    Session session = sessionFactory.openSession();
    String hqlQuery = "from GrowBox where user_id =: userId";
    Query query = session.createQuery(hqlQuery);
    List growBoxes = query.getResultList();
    session.flush();
    session.close();
    return growBoxes;
}

标签: javahibernate

解决方案


HQL 查询将是

String hqlQuery = "from GrowBox gb where gb.responsibleUser.id =: userId";

推荐阅读