在保存子实体时传递的独立实体可以持久保存

时间:2020-03-14 15:50:47

标签: spring hibernate spring-boot jpa

我的用户类别如下

@Entity
@Table
public class User implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long userId;

    @Column(nullable = false)
    String firstName;

    @Column(nullable = false)
    String lastName;

    @Column(nullable = false, unique = true)
    String email;

    @Column
    String mobile;

    @Column(nullable = true)
    String password;

    @Column(nullable = false)
    String role;

    @Column(nullable = false)
    boolean isAccountLocked;

    @Column(nullable = false)
    boolean isAccountDisabled;

    @Column(nullable = false)
    boolean isPasswordExipred;

    @Column(nullable = false)
    boolean isAccountExipred;

    // Relations
    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JsonIgnore
    UserPersonalDetails personalDetails;

    // Relations
    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)@JsonIgnore
    StudentAcadmicsDetails studentAcadmicsDetails;

// getter setters
}

我的StudentAcadmicDetails类如下

@Entity
    @Table
    public class StudentAcadmicsDetails {

    @Id
    Long userId;


    @PrimaryKeyJoinColumn 
    @OneToOne(cascade = CascadeType.ALL)
    @OnDelete(action = OnDeleteAction.CASCADE)
    @MapsId
    User user;

    String department;
    Integer year;
    String division;
    String branch;
    Integer semister;
// getter setters
}

下面是我的服务层代码

@Service
public class StudentAcadmicsService {
@Autowired
StudentAcadmicsDAO studentAcadmicsDAO;

@Autowired
UserService userService;

public StudentAcadmicsDetails saveStudentAcadmicsDetails(StudentAcadmicsDetails details) {
    User user = userService.findById(details.getUser().getUserId());
    details.setUser(user);
    return studentAcadmicsDAO.save(details);
}

使用JpaRepository接口保存StudentAcadmicsDetails时出现以下错误。

org.hibernate.PersistentObjectException:分离的实体传递给 坚持:com.asset.app.user.User

如果有任何方法,我可以直接保存StudentAcadmicsDetails,而无需保存附加的用户对象。用户和StudentAcadmicsDetails之间的数据库映射应通过userId字段

进行解析

0 个答案:

没有答案