簡體   English   中英

具有舊版映射表的休眠注釋

[英]Hibernate Annotations with a legacy mapping table

我正在嘗試將數據訪問層的一部分轉換為休眠狀態,並在使集合關聯正確時遇到一些麻煩。 我正在使用休眠注釋,並且有兩個相關的實體(此處的基本配置有效,只是沒有聯接)。 一些名稱已被混淆:

Spring 3,Hibernate 3,Java 6,MySQL 5。

容器有一個視頻列表。 這兩個類都在帶有注釋的休眠狀態下映射。

不幸的是,映射表具有異常的架構。 看起來像這樣:

container_mapping:
+-----------------+------------------+------+-----+-------------------+-------+
| Field           | Type             | Null | Key | Default           | Extra |
+-----------------+------------------+------+-----+-------------------+-------+
| internal_id     | int(10) unsigned | NO   | PRI |                   |       |
| external_id     | varchar(255)     | NO   | PRI |                   |       |
| mapping_type_id | int(4) unsigned  | NO   | PRI |                   |       |
| creation_date   | timestamp        | NO   |     | CURRENT_TIMESTAMP |       |
+-----------------+------------------+------+-----+-------------------+-------+

當mapping_type_id = 2時,internal_id映射到container.id,external_id映射到video.id

通過ID回退的查詢:

select * from container c, container_mapping cm, video v where cm.mapping_type_id=2 and c.episode_id = cm.internal_id and cm.external_id = v.id and c.episode_id=?;

我似乎找不到一個很好的例子,可以使集合與具有特定值的聯接字段聯接。 在這一點上,我正在抓稻草。 (不完整的)版本在這里:

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="container_mapping",
        joinColumns = @JoinColumn(name="external_id"))
private List<Video> videos = Lists.newArrayList();

有人對如何進行有任何指示嗎?

您可以嘗試通過以下方式映射視頻收藏集:

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="container_mapping",
     joinColumns = @JoinColumn(name="internal_id"),
     inverseJoinColumns = @JoinColumn(name="external_id")
@WhereJoinTable(clause="mapping_type_id=2")
private List<Video> videos = Lists.newArrayList();

此映射的想法如下:

  1. @JoinTable批注的joinColumns參數用於配置列,該列存儲容器ID的值。
  2. 使用@JoinTable批注的inverseJoinColumns參數配置存儲視頻ID的列。
  3. @WhereJoinTable批注可用於限制從聯接表中選擇的行。 子句參數必須使用SQL編寫。 在這種情況下,它用於限制mapping_type_id的值,該值必須為2。

暫無
暫無

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

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