有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA mappedBy不使用关系持久化实体

例如,我有以下实体: 房间实体:

@Entity
public class Room extends Base {

@OneToMany(mappedBy = "room")
private List<Person> persons;
//getters and setters
}

个人和实体:

@Entity
public class Person extends Base {

@ManyToOne
private Room room;

private String name;
//getters and setters
}

如果我将person添加到文件室的persons列表中,然后继续,则会添加文件室,但不会添加person。我想,在OneToMany注释中添加mappedBy参数就足够了,但是。。我还应该做什么


共 (2) 个答案

  1. # 1 楼答案

    你需要在@OneToMany上设置CascadeType=PERSIST or ALL。还可以在Person类中设置room变量来填充Person表中的外键

  2. # 2 楼答案

    相反,将Room设置为Person实例的房间字段:

    Room room = ...;
    person.setRoom(room);
    // persist the person  
    

    通过mappedBy,您可以指定哪个实体拥有关系。更新这两个实体之间的关系是拥有方的责任

    在您的示例中,Person拥有这个关系,所以他有责任更新外键,而不是Room,所以当您向Room中的人员列表添加Person并更新Room时,Room不会为您更新外键