通过中间表一对一地休眠

时间:2013-11-24 16:21:11

标签: 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_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;
    ...
}

出于性能原因,Users表分为两部分 表:永久用户详细信息(或至少那些没有太大变化的用户详细信息) 一个用于临时用户详细信息;那些每天都在变化的人。所以 最后一个项目的主键位于last_projects表中。每个用户只有 此表中的一个条目。 鉴于这一切,我如何将项目休眠映射到用户实体?

2 个答案:

答案 0 :(得分:0)

该关联是一对一关联,因此您需要@OneToOne。它由两个实体之间的连接表实现,因此您需要@JoinTable

阅读the javadoc和hibernate文档以获取示例。

答案 1 :(得分:0)

我尝试了以下内容,它就像一个魅力:

<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>

谢谢!