当我使用jpa和CascadeType.PERSIST

时间:2017-12-04 01:06:31

标签: java spring hibernate spring-data-jpa

专家。我是Spring Data JPA的初学者。当我使用CasecadeType.PERSIST时,我发现无法将某些值保存到表列。

我有2个简单的表格:

Parent(id int, name varchar)
Child(id int,name varchar,parent_id )

域类:

Parent.java

@Entity
@Table(name="Parent")
public class Parent{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String name;

    @OneToMany(cascade= {CascadeType.PERSIST})
    @JoinColumn(name="parent_id")
    private List<Child> children;

    // getter and setter... 
}


Child.java 

@Entity
@Table(name="Child")
public class Child{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String name;

    @ManyToOne
    private Parent parent;

    // getter and setter ...
}

然后我使用JUnit执行以下代码:

Parent parent = new Parent();
parent.setName("Parent");
List<Child> children = new ArrayList<Child>();
for(int i = 0 ; i < 6 ;i ++ ) {
    children.add(new Child("Child" + (i+1)));
}
parent.setChildren(children);
parentRepository.save(parent);

父数据和子数据将持久保存到数据库中。请参阅:

Parent Table

Child Table

然后我执行以下代码:

Parent parent = parentRepository.findOne(18L);
parent.setName("Parent New");
List<Child> children = new ArrayList<Child>();
for(int i = 100 ; i < 106 ;i ++ ) {
    children.add(new Child("New Child" + (i+1)));
}
parent.setChildren(children);
parentRepository.save(parent);

我想获取带有id(18)的exists Parent,并在parent的子属性中添加新的子列表,但是当我检查数据库时,子表中新插入记录的name列为null。

Parent Table

Child Table

0 个答案:

没有答案