Hibernate 通过中间表一对一休眠
鉴于这三个表格:Hibernate 通过中间表一对一休眠,hibernate,orm,Hibernate,Orm,鉴于这三个表格: CREATE TABLE USERS ( USER_ID INT NOT NULL PRIMARY KEY, NAME_FIRST VARCHAR(15), NAME_LAST VARCHAR(20), LOGIN_NAME VARCHAR(20) NOT NULL UNIQUE, PASSWORD VARCHAR(20) NOT NULL, ... ); CREATE TABLE PROJECTS ( PROJECT_
CREATE TABLE USERS
(
USER_ID INT NOT NULL PRIMARY KEY,
NAME_FIRST VARCHAR(15),
NAME_LAST VARCHAR(20),
LOGIN_NAME VARCHAR(20) NOT NULL UNIQUE,
PASSWORD VARCHAR(20) NOT NULL,
...
);
CREATE TABLE PROJECTS
(
PROJECT_ID INT NOT NULL PRIMARY KEY,
PROJECT_NAME VARCHAR(255) NOT NULL UNIQUE,
...
);
CREATE TABLE LAST_PROJECTS
(
USER_ID INT NOT NULL PRIMARY KEY,
PROJECT_ID INT NOT NULL
);
这两个实体:
public class User
{
private Long userID;
...
private Project lastProject;
...
}
public class Project
{
private Long projectID;
private String projectName;
...
}
发生的情况是,出于性能原因,用户表被拆分为两个
表:永久用户详细信息(或至少那些变化不大的)
一个用于临时用户详细信息;那些每天都在变化的人。所以
最后一个项目的主键位于last_projects表中。每个用户只有
此表中有一个条目。
考虑到所有这些,如何在hibernate中将项目映射到用户实体中?关联是一对一的关联,因此需要
@OneToOne
。它由两个实体之间的联接表具体化,因此需要@JoinTable
阅读hibernate文档以获取示例。我尝试了以下方法,效果非常好:
<class ...>
<attribute ...>
...
<join table="LAST_PROJECTS" optional="true">
<key column="USER_ID" />
<many-to-one name="lastProject" column="PROJECT_ID"
class="Project" not-null="true" unique="true"/>
</join>
</class>
...
谢谢 到目前为止你试过什么吗?