gpt4 book ai didi

java - 如何配置(可选)一对一复合主键?

转载 作者:行者123 更新时间:2023-12-02 05:27:49 25 4
gpt4 key购买 nike

我正在使用 Hibernate,并且有两个表 STUDENTS 和 DORM_ROOMS,它们与组合键相关:

STUDENTS table:
CAMPUS(String) Part of Composite Key
STUDENT_ID (int) Part of Composite Key
NAME (String)
...

DORM_ROOMS table:
CAMPUS(String) Part of Composite Key
STUDENT_ID (int) Part of Composite Key
ROOM_NUMBER(int)
...

这种关系是一对一的,因为一个学生可以与一个宿舍关联,而一个宿舍又与一个学生关联(哇 - 一个私有(private)房间!)。然而,并非所有学生都有宿舍。

我的初始代码(精简)如下所示:

FOR STUDENTS:
@Embeddable
public class StudentsPK implements Serializable {
@Column(name = "CAMPUS")
private String Campus;
@Column(name = "STUDENT_ID")
private String StudentID;
...
}


@Entity
@Table(name = "STUDENTS")
public class Students implements Serializable {
@EmbeddedId
private StudentsPK studentsPK;
...
}


FOR DORM_ROOMS:
@Embeddable
public class DormRoomsPK implements Serializable {
@Column(name = "CAMPUS")
private String Campus;
@Column(name = "STUDENT_ID")
private String StudentID;
...
}


@Entity
@Table(name = "DORM_ROOMS")
public class DormRooms implements Serializable {
@EmbeddedId
private DormRoomsPK dormRoomsPK;
...
}

假设数据库架构已定义并创建。特别是,CAMPUS+STUDENT_ID 是 STUDENTS 的 PK,CAMPUS+STUDENT_ID 是 DORM_ROOMS 的 FK,充当该表中的 PK。此时,我可以成功地将一行插入到 STUDENTS 中,并将一行插入到 DORM_ROOMS 中。即使学生没有宿舍,我也可以从 STUDENTS 检索任何学生。然而,我还没有“告知”Hibernate这两个表之间的关系。这就是我困惑的地方。

我尝试使用“JOIN”注释来“关联”这两个表,但我发现这会导致任何尝试获取没有宿舍的学生的操作都会返回空结果集。我想这是因为如果“JOIN”声明表始终被视为已连接,那么加入没有宿舍且 DORM_ROOMS 表中没有匹配行的学生将导致空结果集。

由于使用“JOIN”注释不起作用,我如何修改代码来描述两个表之间的关系,但仍然允许我获取没有匹配宿舍房间的学生?

谢谢。

最佳答案

听起来您正在寻找 @OneToOne annotation ,它还能够指定关系是否为 optionalJBoss JPA 2.1 docs 中描述了一些示例。 ,这是其中之一。

Example 3: One-to-one association from an embeddable class to another entity.

@Entity
public class Employee {
@Id int id;
@Embedded LocationDetails location;
...
}

@Embeddable
public class LocationDetails {
int officeNumber;
@OneToOne ParkingSpot parkingSpot;
...
}

@Entity
public class ParkingSpot {
@Id int id;
String garage;
@OneToOne(mappedBy="location.parkingSpot") Employee assignedTo;
}

关于java - 如何配置(可选)一对一复合主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25836688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com