cod*_*eme 0 many-to-many jpa kotlin spring-boot
我有两个类,它们在 Spring Boot 应用程序中具有双向多对多关系。当我想获取我的实体时,它们开始递归循环,并且我收到一个 stackoverflow 异常。这是我的实现。
@Entity
@Table(name = "route")
data class Route(
@Column(name = "uid")
@Type(type = "pg-uuid")
@Id
var uid: UUID,
var image: String,
@Column(name = "rate_id")
var rate_id: UUID,
@ManyToMany(cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
@JoinTable(name = "ach",
joinColumns = [JoinColumn(name = "route_id", referencedColumnName = "uid")],
inverseJoinColumns = [JoinColumn(name = "athlete_id", referencedColumnName = "uid")])
var athletes: List<Athlete> = mutableListOf())
@Entity
@Table(name = "athlete")
data class Athlete(
@Column(name = "uid")
@Type(type = "pg-uuid")
@Id
var uid: UUID,
var email: String,
var image: String,
@ManyToMany(mappedBy = "athletes")
var routes: List<Route> = mutableListOf())
Run Code Online (Sandbox Code Playgroud)
我知道问题在于我的两个列表属性都在构造函数中。但是我想在响应中包含列表属性。我见过覆盖 toString 方法以创建 json 字符串的解决方案。我更愿意返回一个对象而不是一个 jsonString。有没有办法在有或没有数据类的情况下实现上述问题?如果有办法,请举一些例子。
请注意,此答案是具有 ManyToMany 双向关系的 Kotlin 数据类的解决方案。
@ManyToMany(cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
@JoinTable(name = "ach",
joinColumns = [JoinColumn(name = "route_id", referencedColumnName = "uid")],
inverseJoinColumns = [JoinColumn(name = "athlete_id", referencedColumnName = "uid")])
@JsonIgnoreProperties("routes")
var athletes: List<Athlete> = mutableListOf())
@ManyToMany(mappedBy = "athletes")
@JsonIgnoreProperties("athletes")
var routes: List<Route> = mutableListOf())
Run Code Online (Sandbox Code Playgroud)
通过添加@JsonIgnoreProperties,您可以避免递归循环。
| 归档时间: |
|
| 查看次数: |
4284 次 |
| 最近记录: |