所以我有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;