簡體   English   中英

Hibernate 實體映射

[英]Hibernate Entity Mapping

各位晚安,

我想 model 一個具有以下實體及其透視關系的數據庫:

uml-關系

但是每次我運行 Java 項目以在數據庫中創建 model 時,我創建的是這樣的:

數據庫文章表

map這個關系還有別的辦法嗎? 我是這樣映射的:

文章實體:

@Entity
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private Boolean featured;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String url;

    @Column(name = "image_url", nullable = false)
    private String imageUrl;

    @Column(name = "news_site", nullable = false)
    private String newsSite;

    @Column(nullable = false)
    private String summary;

    @Column(name = "published_at", nullable = false)
    private String publishedAt;

    @OneToMany
    @JoinColumn(name = "launches_id")
    private List<Launches> launches;

    @OneToMany
    @JoinColumn(name = "events_id")
    private  List<Events> events;
}

啟動實體

@Entity
public class Launches {
    @Id
    private String id;

    private String provider;
}

事件實體:

@Entity
public class Events {
    @Id
    private Long id;

    private String provider;
}

我想 map 這個 JSON,在其他文章中出現同樣的啟動器和事件:

{
    "id": 4278,
    "title": "GAO warns of more JWST delays",
    "url": "https://spacenews.com/gao-warns-of-more-jwst-delays/",
    "imageUrl": "https://spacenews.com/wp-content/uploads/2019/08/jwst-assembled.jpg",
    "newsSite": "SpaceNews",
    "summary": "",
    "publishedAt": "2020-01-28T23:25:02.000Z",
    "updatedAt": "2021-05-18T13:46:00.284Z",
    "featured": false,
    "launches": [
        {
            "id": "d0fa4bb2-80ea-4808-af08-7785dde53bf6",
            "provider": "Launch Library 2"
        }
    ],
    "events": []
},
{
    "id": 4304,
    "title": "Government watchdog warns of another JWST launch delay",
    "url": "https://spaceflightnow.com/2020/01/30/government-watchdog-warns-of-another-jwst-launch-delay/",
    "imageUrl": "https://mk0spaceflightnoa02a.kinstacdn.com/wp-content/uploads/2020/01/48936479373_2d8a120c8e_k.jpg",
    "newsSite": "Spaceflight Now",
    "summary": "",
    "publishedAt": "2020-01-30T04:08:00.000Z",
    "updatedAt": "2021-05-18T13:46:01.640Z",
    "featured": false,
    "launches": [
        {
            "id": "d0fa4bb2-80ea-4808-af08-7785dde53bf6",
            "provider": "Launch Library 2"
        }
    ],
    "events": []
}

根據您的圖表,它應該是:

    @ManyToOne
    @JoinColumn(name = "launches_id")
    private Launches launches;

    @ManyToOne
    @JoinColumn(name = "events_id")
    private  Events events;

...而不是@OneToMany ;) (可以有一個具有launchers_id = y AND launchers_id = z的“文章”(id = x)嗎?不,反之亦然::)

...對於@OneToMany ,您應該在“另一邊”(關系)找到連接列。

暫無
暫無

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

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