java - 我应该如何获得相关实体?
问题描述
我想了解如何在 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;
}
解决方案
HQL 查询将是
String hqlQuery = "from GrowBox gb where gb.responsibleUser.id =: userId";
推荐阅读
- html - 登录时的兴趣选择:AngularJS
- python - 如何处理有关分析通话记录并获得有关该主题的有意义结果的项目
- html - 无法更改 img 上的高度
- c# - 从 C# 运行的 powershell 命令捕获输出
- google-apps-script - 在编辑特定范围时运行函数 - 跟进问题 2
- node.js - 如何在节点js中使用异步和等待获取数据
- android - Gradle Build Fails - 类文件 com/google/wireless/android/sdk/stats/GradleBuildMemorySample$Builder 中的非法异常表范围
- reactjs - 一个字段的列内带有下拉菜单的材料 UI 表
- azure - Terraform:如何将一个模块的输出值传递给天蓝色的另一个模块
- powershell - 有没有办法使用 powershell 从 lotus notes 数据库中获取超过 30 分钟的文档?