0
如果連接列之一不是該實體的標識符屬性,是否可以使用註釋在Hibernate中使用註釋創建多對多關係?父實體有兩個不同的獨特屬性,我希望能夠使用任何一個作爲連接列,但我恐怕Hibernate可能不會允許這樣做。使用非標識符屬性爲連接列休眠多對多
在MySQL中,這與創建引用父表上的唯一列而不是主鍵的外鍵約束類似。
在我的MySQL數據庫中,我有一個連接表,其中一個父表有兩個不同的外鍵關係。這樣做是爲了支持具有相同數據庫表的兩組代碼,並且我試圖更新舊對象以使用新映射,因此我可以放棄對連接表中某個外鍵的支持。
我閱讀了文檔,找不到明確的關於這是否被支持的內容。任何有識之士將不勝感激。
謝謝!
這裏是Java類(簡化了這個問題,所以請原諒任何錯別字):
@Entity
@Table(name="TAG")
@org.hibernate.annotations.Table(appliesTo = "TAG")
public class Tag implements Externalizable {
private Long id;
private String name;
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "TAG_ID", unique = true)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Id
@Column(name = "NAME", unique = true)
public String getName() {
return name;
}
public void setName(String name) {
name = name.toLowerCase();
this.name = name;
}
}
@Entity
@Table(name="ITEM")
@org.hibernate.annotations.Table(appliesTo = "ITEM")
public class Item implements Externalizable {
private Long id;
private String name;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ITEM_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
name = name.toLowerCase();
this.name = name;
}
//tag support
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
@Fetch(value = FetchMode.SELECT)
@JoinTable(name = "ITEM_TAG", joinColumns = {@JoinColumn(name = "ITEM_ID")}, inverseJoinColumns = @JoinColumn(name = "TAG_NAME", referencedColumnName="NAME"))
@OrderBy("name")
public Set<Tag> getTags() {
return tags;
}
public void setTags(Set<Tag> tags) {
this.tags = tags;
}
}
下面是MySQL表定義(簡化了這個問題):
mysql> desc tag;
+--------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+----------------+
| tag_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
+--------+------------------+------+-----+---------+----------------+
mysql> desc item;
+---------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| item_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
+---------+------------------+------+-----+---------+----------------+
mysql> desc item_tag;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| item_tag_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| item_id | int(10) unsigned | NO | MUL | NULL | |
| tag_id | int(10) unsigned | NO | MUL | NULL | |
| tag_name | varchar(255) | NO | MUL | NULL | |
+-------------+------------------+------+-----+---------+----------------+
謝謝。我大概可以擺脫所有的級聯。我如何將關係設置爲只讀? –