【发布时间】:2022-01-08 06:59:21
【问题描述】:
我有以下Post 类:
@Entity
@Table(name = "posts")
@Getter
@Setter
@JsonIdentityInfo( generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id",
scope = Long.class)
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String subtitle;
private String content;
private String img_url;
@CreationTimestamp
private Timestamp created_on;
@UpdateTimestamp
private Timestamp last_updated_on;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "owner_id", nullable=false)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private User creator;
}
以及以下扩展 JpaRepository 的存储库
@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
Optional<Post> findById(Long id);
List<Post> findAll();
}
当在下面的控制器中返回findAll()的结果时,只有第一个创建者项目被完全发送,其余的只包含id:
@GetMapping("/news")
public List<Post> getNews() {
return postRepository.findAll();
}
这是我得到的 JSON:
[
{"id":15,"title":"Title example #1","subtitle":"Subtitle example #1","content":"Lorem #1 ipsum dolor sit amet","img_url":null,"created_on":"2021-12-01T00:00:00.000+00:00","last_updated_on":"2021-12-01T00:00:00.000+00:00","creator":{"id":1,"username":"user-example","email":"blablabla@gmail.com","roles":[{"id":1,"name":"ROLE_USER"}]}}
,{"id":25,"title":"Title example #2","subtitle":"Subtitle example #2","content":"Lorem #2 ipsum dolor sit amet","img_url":null,"created_on":"2021-12-01T00:00:00.000+00:00","last_updated_on":"2021-12-01T00:00:00.000+00:00","creator":1}
]
为什么会这样?有没有办法为 JSON 数组中的每个元素获取整个子对象?
谢谢
编辑:添加了User 类
@Entity
@Table( name = "users",
uniqueConstraints = {
@UniqueConstraint(columnNames = "username"),
@UniqueConstraint(columnNames = "email")
})
@DiscriminatorValue(value="USER")
public class User extends OwnerEntity {
@NotBlank
@NotNull
@Size(max = 20)
private String username;
@NotBlank
@NotNull
@Size(max = 50)
@Email
private String email;
@NotBlank
@Size(max = 120)
@JsonIgnore
private String password;
@CreationTimestamp
private Timestamp created_on;
@UpdateTimestamp
private Timestamp last_updated_on;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable( name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
@ManyToMany(fetch = FetchType.LAZY)
private Set<Institution> institutions;
@OneToMany(mappedBy="creator", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
protected Set<Post> posts;
@ManyToMany(fetch = FetchType.LAZY)
private Set<Institution> following;
}
编辑 2:添加 OwnerEntity 类
@Entity
@Table(name = "entities")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
@Getter
@Setter
@JsonIdentityInfo( generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id",
scope = Long.class)
public class OwnerEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
}
【问题讨论】:
-
您能否在您的问题中添加
User类? -
已编辑并添加,就是这样!比
-
可以加
OwnerEntity吗?谢谢! -
添加了OwnerEntity.java!
-
跟我想的完全一样。请在下面查看我的答案;)
标签: spring spring-boot hibernate spring-data-jpa