簡體   English   中英

使用自引用創建 jpa 實體

[英]Creating jpa entity with self reference

我有需要通過一對一映射自我引用的 pojo。 我正在使用flyway來調出桌子。 該應用程序啟動正常,但是當我嘗試執行獲取請求時,我收到以下錯誤:

nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct self-reference leading to cycle 

我認為我自我引用的方式有問題。 請幫忙。 提前致謝。

這是我的 sql:

CREATE TABLE tbl_person (
    id BIGINT(20) NOT NULL AUTO_INCREMENT,
    name VARCHAR(255),
    parent_id BIGINT(20),
    primary key (id));
    
CREATE SEQUENCE person_seq START WITH 1 INCREMENT BY 1;
    

這是我的 model:

@Entity
@Data
@Table(name="tbl_person")
public class Person {

    @Id
    @GeneratedValue(strategy= GenerationType.SEQUENCE,generator = "person_seq")
    @SequenceGenerator(name="person_seq",allocationSize = 1)
    @Column(name="id",insertable =false,nullable = false,updatable = false)
    private Long id;

    @Column(name="name")
    private String name;


    @Column(name="address")
    private String address
   
    @OneToOne
    @JoinColumn(name="parent_id")
    @JsonManagedReference
    private Person person;

}

錯誤信息來自 jackson。 因此,它在轉換為 java object 或返回 json/xml 時失敗,而不是將其寫入數據庫。

問題是生成的 JSON object 可能包含另一個 Person-json 可以指同一個人。 這將創建一個無限循環。

這會導致這樣的事情:


{
    "id": 1,
    "name": "Example",
    "address": "example-address",
    "person": {
        "id": 1,
        "name": "Example",
        "address": "example-address",
        "person": {
            "id": 1,
            "name": "Example",
            "address": "example-address",
            "person": {
               ...
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM