Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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
Java 为什么使用mappedBy时一对多映射会失败? @实体 公共类Person实现可序列化{ @身份证 @生成值 私有int-id; 私有字符串名称; @OneToMany(cascade=CascadeType.ALL,mappedBy=“person”) 私家车名单; //接球手和接球手 } @实体 公共类Car实现可序列化{ @身份证 @生成值 私有int-id; 私有字符串名称; @许多酮 @JoinColumn(name=“person\u id”) 私人; //接球手和接球手 }_Java_Hibernate_Jpa_Orm - Fatal编程技术网

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