java - 使用休眠连接两个表
问题描述
我正在寻找一个 DAO,它表示两个表与 Java Hibernate 的连接。这是我想代表的 SQL(Postgres 9.6 很重要):
SELECT tableOneValue, tableTwoValue
FROM table_one, table_two
WHERE table_one_filter = 2 AND table_one_id = table_two_id;
这些表具有 OneToOne 关系。
表1.java
@Entity
@Data
@Table(name="table_one")
public class TableOneDao implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "table_one_id")
private int tableOneId;
@Column(name = "table_one_value")
private String tableOneValue;
@Column(name = "table_one_filter")
private int tableOneFilter;
}
表2.java
@Entity
@Data
@Table(name="table_two")
public class TableTwoDao implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "table_twp_id")
private int tableTwpId;
@Column(name = "table_two_value")
private String tableTwoValue;
}
我对休眠很陌生,所以也许这不是正确的思考方式。我想做的是定义一个我可以做的 SomeDao 类:daoManager.findAll(SomeDao.class, Pair.of("tableOneFilter", 2));
这将返回一个List<SomeDao>
我们得到满足 tableOneFilter == 2 的所有行的地方。
解决方案
您需要使用@OneToOne
and@JoinColumn
注释。
特别注意userDetail
属性映射。
例如,用户类:
@Entity
@Table(name = "USERS")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USR_ID")
private long id;
@Column(name = "USERNAME", nullable = false, unique = true)
private String username;
@Column(name = "PASSWORD")
private String password;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="USR_DET_ID")
private UserDetail userDetail;
// Add Constructor, Setter and Getter methods
}
而这个用户详细信息类:
@Entity
@Table(name = "USER_DETAILS")
public class UserDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USR_DET_ID")
private long id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "EMAIL")
private String email;
@Column(name = "DBO")
private LocalDate dob;
// Add Constructor, Setter and Getter methods
}
在此处查看完整代码。
推荐阅读
- android - 为 Android TV 开发应用程序 - SVG 文本在 4K 电视上像素化和模糊
- android - Sectigo 证书被我的 Android CK65 Honeywell 设备上的 Google Chrome 接受,即使 Sectigo 不在受信任的凭据列表中
- python - 当我要求它遍历列表时,为什么 python 会打印整个列表?
- reactjs - Redux vs Context API 和 useReducer 钩子
- flask - 混合内容....但请求了不安全的框架“http://www.searchvity.com/”
- firebase-realtime-database - 为什么 firebase CLI 将数据推送到实时数据库上的随机路径?
- javascript - 从 axios API 搜索 vue b-table 中的特定数据
- reactjs - 在函数组件主体之外访问 React Context 值
- acumatica - 如何通过 Rest API 获取/更新客户 GL 帐户信息
- datetime - 在 Google Apps 脚本中使用日期、时间