Java 为什么使用mappedBy时一对多映射会失败? @实体 公共类Person实现可序列化{ @身份证 @生成值 私有int-id; 私有字符串名称; @OneToMany(cascade=CascadeType.ALL,mappedBy=“person”) 私家车名单; //接球手和接球手 } @实体 公共类Car实现可序列化{ @身份证 @生成值 私有int-id; 私有字符串名称; @许多酮 @JoinColumn(name=“person\u id”) 私人; //接球手和接球手 }
和。。我就是这样用的Java 为什么使用mappedBy时一对多映射会失败? @实体 公共类Person实现可序列化{ @身份证 @生成值 私有int-id; 私有字符串名称; @OneToMany(cascade=CascadeType.ALL,mappedBy=“person”) 私家车名单; //接球手和接球手 } @实体 公共类Car实现可序列化{ @身份证 @生成值 私有int-id; 私有字符串名称; @许多酮 @JoinColumn(name=“person\u id”) 私人; //接球手和接球手 },java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,和。。我就是这样用的 @Entity public class Person implements Serializable{ @Id @GeneratedValue private int id; private String name; @OneToMany(cascade = CascadeType.ALL, mappedBy = "person") private List<Car> cars; //get
@Entity
public class Person implements Serializable{
@Id
@GeneratedValue
private int id;
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person")
private List<Car> cars;
//getters and setters
}
@Entity
public class Car implements Serializable{
@Id
@GeneratedValue
private int id;
private String name;
@ManyToOne
@JoinColumn(name = "person_id")
private Person person;
// getters and setters
}
Person per=新人();
根据setName(“某些”);
Car car1=新车();
car1.设定名称(“福特”);
Car car2=新车();
car2.设定名称(“WagonR”);
//s、 保存(car1);
//s、 save(car2);
per.setCars(新的ArrayList());
per.getCars().add(car1);
per.getCars().add(car2);
s、 节省(每小时);
现在。。表
Car
有一列person\u id
,但其显示的null
适用于两辆车。。我做错了什么?表Person
已正确填写。如果我从Person
表中删除“mappedBy
”。。而是在这里包含@JoinColumn
。。。然后它工作正常。尝试调用car.setPerson(per)
通过映射,关系的所有者是车而不是人。。。这就是为什么在救人的时候,车没有被救。如果您删除mappedBy
,则关系的所有者将成为您期望的行为 您应该在设置人员后首先保存汽车实例。@SotiriosDelimanolis但当我们保存人员实体时,汽车实例将自动保存。。。这是正确的。。我的问题是为什么我们要先救汽车。。要获得正确的映射?即使我们先保存汽车实例,它也不起作用。当我在两个汽车对象上设置person对象时,它起作用了。。。但是为什么我的方法不起作用呢?这就是Hibernate的工作原理。我现在没有文档的链接,但试着用谷歌搜索一下。我也没有一个好的答案,似乎我不是唯一的一个:事实上,这些车正在被拯救。但是为什么person_id为null?由于CascadeType,车辆得以保存。您在OneToMany中指定了所有内容,但是外键没有正确填充,因为您假设关系的所有者是person,而映射的所有者是Car。
Person per = new Person();
per.setName("some");
Car car1 = new Car();
car1.setName("Ford");
Car car2 = new Car();
car2.setName("WagonR");
//s.save(car1);
//s.save(car2);
per.setCars(new ArrayList<Car>());
per.getCars().add(car1);
per.getCars().add(car2);
s.save(per);