spring存储库保存具有使用子类生成的属性的对象

nzrxty8p  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(221)

所以我有一个voteevent类,它是event类的一个子类。事件类如下所示:

@MappedSuperclass
public class Event {
    @Column(name="name")
    private String name;
    @Column(name="timeSlot")
    private String timeSlot;

voteevent类如下所示:

@Entity
@Table(name = "vote_events")

public class VoteEvent extends Event implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name = "upVotes")
    private Integer upVotes = 0;

在我的user对象中,我有一个voteevents数组,这样我就知道哪些事件是某个特定用户所决定的。在我的前端,当我更新用户upvoted事件时,我传入一组投票事件,这些事件具有timeslot和name属性。但是当我这样做的时候:

return new ResponseEntity<User>(userRepository.save(_user), HttpStatus.OK);

,响应是正确的,投票事件的用户数组具有名称和时隙属性,但是当我查看数据库时,投票事件的用户数组具有空名称和时隙属性。因此,每当我使用spring存储库保存一个对象时,它包含用子类构造的对象,它们就会丢失超类属性。

a11xaf1n

a11xaf1n1#

试试下面的代码,它的工作对我来说很好。

package com.apimanager.metadata;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import lombok.experimental.SuperBuilder;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;

@Data
@SuperBuilder(toBuilder = true)
@RequiredArgsConstructor
@MappedSuperclass
public class Event {
    @Column(name = "name")
    private String name;
    @Column(name = "timeSlot")
    private String timeSlot;
}

对于voteevent和event,请提供 @SuperBuilder 以及 @RequiredArgsConstructor . 可能是因为这些物业在 VoteEvent 对象

@SuperBuilder(toBuilder = true)
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "vote_events")
public class VoteEvent extends Event implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name = "upVotes")
    private Integer upVotes = 0;

相关问题