【发布时间】:2017-03-25 19:55:51
【问题描述】:
我有一个带有 JPA 和 H2 的 Spring Boot 应用程序,其中包含两个实体:
@Entity
@Table(name = "people")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "person_id")
private long id;
private String name;
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
private Set<Skill> skills = new HashSet<Skill>();
}
@Entity
@Table(name = "skills")
public class Skill {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "skill_id")
private long id;
private String name;
@ManyToOne
@JoinColumn (name="person_id")
@JsonBackReference
private Person person;
}
我有个人实体的 JPA 存储库:
@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {
}
当我尝试保存以下对象时,它会立即返回包含技能的正确实体,但是当我调用repository.find(<id-of-saved-entity>) 时,技能是空的(因此它们没有被持久化):
{ "name": "Test", "skills": [ { "name": "Skill1" }, { "name": "Skill2"} ] }
有人可以帮我看看我的映射和配置有什么问题吗?
【问题讨论】:
-
如果你做 person.getSkills().size().. 集合加载了吗?
-
@Smajl 你试过
@ElementCollection -
skills是否保存在数据库中? -
您指定列名是否有原因?
-
@javaguy 不,他们没有。如果我尝试访问
person.getSkills(),它会说集合是空的。
标签: java hibernate spring-boot spring-repositories