【发布时间】:2018-05-30 18:37:12
【问题描述】:
如何配置 crud 存储库以拥有多个实体?
我有实体 Person 和 Numbe。人有数,数有人。
@Entity
public class Person{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(nullable = false)
@OneToMany(mappedBy = "owner",cascade=CascadeType.ALL)
private List<Number> numbers
//getters and setters
}
@Entity
public class Number{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne
@JoinColumn("owner_id")
private Person owner;
//getters and setters
}
我有接口
@EnableJpaRepositories
public interface personIE extends CrudRepository<Person, Long> {
}
@EnableJpaRepositories
public interface numberIE extends CrudRepository<Number, Long> {
}
现在当我这样做时:
@Autowired
private personIE p_IE;
@Autowired
private numberIE n_IE;
public void test(){
Person p = new Person();
List<Number> numbers = new ArrayList<>();
numbers.add(new Number());
numbers.add(new Number());
p.setNumbers(numbers)
p_IE.save(p);
}
现在,当我想检查保存的内容并检索数据时,我只得到了 Person。
它的numbers 属性始终设置为[]。对象存在于数据库中,但是它们没有保存在关系中,为什么会这样,我该如何解决?
感谢您的帮助。
【问题讨论】:
-
您确定您的实体配置正确吗?似乎两者都有
@ManyToOne关系还是错字?同样在一对多关系中,我总是确保设置子实体的父实体,这意味着每个Number设置Person字段。 -
@dashboard 打错了谢谢,Person 实体有 OneToMany 注释
-
为所有
numbers调用numbers[i].setPerson(p)怎么样? -
@dashboard 可以,但这不是我想做的...
-
我曾经遇到过这个问题,神秘的是因为子(编号)存储库。删除
numberIE再试一次怎么样?