Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 通过中间表一对一休眠_Hibernate_Orm - Fatal编程技术网

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>

...

谢谢

到目前为止你试过什么吗?