簡體   English   中英

JPA - 實體 Map 的 3 列表

[英]JPA - 3 columns table to Entity Map

我正在尋找一種方法來對查詢進行分組並將其他值放入 map 但我無法找到沒有加入的單個表的方法。 我的情況如下:

CREATE TABLE metadata (    
    container_id INT NOT NULL,
    metadata_key VARCHAR(50) NOT NULL,
    metadata_value VARCHAR(255) NOT NULL,
    PRIMARY KEY (container_id, metadata_key)
);


#container_id | #metadata_key           | metadata_value
--------------+-------------------------+--------------------
15            | REPORTING_DATE          | 20201231
15            | TYPES                   | T1,T2,Tx
11            | START_DATE              | 20201231
1             | SHUTDOWN_ID             | 12345

@Entity
@Table(name = "metadata")
public class Metadata {

    @Id
    @Column(name = "container_id")
    private Integer containerId;

    // metadata_key:metadata_value ???
    private Map<String, String> metadata = new HashMap<>();
    
    ...
}

可能嗎?

您應該考慮 2 個表:

First table : container
#id           | other stuff
--------------+-------------------------
15            | …
11            | …
1             | …

然后是其他表,例如“metadata_key_value”:

#container_id | #metadata_key           | metadata_value
--------------+-------------------------+--------------------
15            | REPORTING_DATE          | 20201231
15            | TYPES                   | T1,T2,Tx
11            | START_DATE              | 20201231
1             | SHUTDOWN_ID             | 12345

其中 « container_id » 是 « container » 表的 FK

那么映射應該是這樣的:

@Entity
@Table(name = « container »)
public class Container {

    @Id
    @Column(name = « id »)
    private Integer id;

    @CollectionTable(name = "metadata_key_value», joinColumns =@JoinColumn(name = "container_id"))
    @MapKeyColumn(name = "metadata_key")
    @Column(name = "metadata_value")
    private Map<String, String> metadata = new HashMap<>();
    
    ...
}

暫無
暫無

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

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