【问题标题】:Persist Nested Entity Spring Rest Data持久化嵌套实体 Spring Rest 数据
【发布时间】:2017-11-13 19:21:25
【问题描述】:

我有一个用户类

@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> {
}

我有一个具有嵌套用户对象的 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
}
}

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

【问题讨论】:

  • 所以你的关系是多个讲师与一个用户?您坚持哪一个用户或讲师有任何代码吗?
  • 抱歉,我尝试了很多不同的方法,看看有什么效果。应该是一对一的。我已经进行了更改并发布了回购代码。
  • 发布您要发布的 JSON。
  • @AlanHay 我已附上 JSON

标签: java spring jpa spring-data spring-data-rest


【解决方案1】:

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,它可能会很有用。

【讨论】:

  • 我在问题中并不清楚这一点,也许我只是在设计这个错误......所以每个用户都将拥有一个或多个角色角色(管理员、教师、学生)。我有一个课程对象,每门课程由一位讲师教授,可以有很多学生。我几乎就像在扩展 User 一样创建了讲师。所以一对一可能不是最好的关系,因为用户不一定是用户,但每个讲师都是用户。
猜你喜欢
  • 2021-06-26
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 2014-10-20
相关资源
最近更新 更多