繁体   English   中英

持久化嵌套实体Spring Rest数据

[英]Persist Nested Entity Spring Rest Data

我有一个用户类别

@Entity(name = "users")
@Table(name = "users")
public class User implements UserDetails {

static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id", nullable = false)
private Long id;

@Column(name = "username", nullable = false, unique = true)
private String username;

@Column(name = "password", nullable = false)
private String password;
}

绑定到一个简单的存储库

public interface UserRepository extends PagingAndSortingRepository<User, Long> {
}

我有一个具有嵌套User对象的Instructor类

@Entity
@Table(name = "instructors")
public class Instructor {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "instructor_id", nullable = false, updatable = false)
private Long id;

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private User user;

@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "course_id")
private List<Course> courses;

}

它与以下存储库一起保存

public interface InstructorRepository extends PagingAndSortingRepository<Instructor, Long> {

}

我发布的JSON

{
"user": {
    "id": 1
}
}

当我尝试对/instructors执行POST 用户输入空值。 我缺少JPA将两者联系在一起的东西吗? 我尝试将CascadeType.ALL添加到该字段上,但这只会引发一个分离的持久异常。

像您已经尝试过的那样,将CascadeType.ALL留给Instructor

@ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;

另外,将以下内容添加到User 好像和我一起工作。 它提供映射信息并使JPA对待User管理

@OneToMany(mappedBy="user")//, cascade=CascadeType.ALL)
private List<Instructor> instructors = new ArrayList<>();

我已经在上面注释掉了cascadeType ,但是如果您想让User与其所有Instructors保持cascadeType ,它可能会很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM