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



所以我有VoteEvent类,它是Event类的一个子类。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;

在我的用户对象中,我有一个VoteEvents数组,这样我就可以知道特定用户对哪些事件投了赞成票。在我的前端,当我更新用户的投票事件时,我传递一组具有时间段和名称属性的投票事件。然而,当我这样做时:

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

,响应是正确的,并且投票事件的用户数组具有name和time slot属性,但当我查看数据库时,投票事件的使用者数组具有null name和time slot属性。因此,每当我使用spring存储库保存对象时,如果该存储库中的对象是用子类构建的,那么它们就会丢失超类属性。

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

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;

最新更新