2010-06-30 81 views
1

我最近在一個類中添加了新屬性,它的列表屬性和我已經爲該屬性編寫了xml映射,這是由於幾個原因,我不想刪除數據庫或使用create選項在hibernate配置文件中更新更改。我必須通過在數據庫上執行sql查詢來手動完成它。Hiberante屬性類型列表,通過sql將其添加到表

XML映射文件:

<list name="items" table="ITEM_ITEM_GROUP" lazy="false" cascade="save-update"> 
    <key column="ITEM_GROUP_ID"></key> 
    <list-index column="IG_INDEX" />    
    <many-to-many column="ITEM_ID" class="Item" /> 
</list> 

任何人都可以請幫助我該怎麼做呢?

+0

您需要通過將此'列'添加到數據庫來更新現有數據庫? – 2010-06-30 06:55:03

+0

是啊我需要通過添加列更新數據庫, – 2010-06-30 06:56:39

+0

我更新了我的答案。 – 2010-06-30 10:24:45

回答

1

你不只是添加一列,要添加的表。

最簡單的方法是使用SchemaExport來創建數據庫模式的SQL腳本。然後你可以複製粘貼新表與索引和一切。

在這種情況下,您很可能不必更改現有的表格,只需添加新的東西即可。

在java中,您可以直接從命令行調用SchemaExport。看看像this here這樣的教程。

在C#中,你需要寫一個工具,它導出模式,代碼看起來是這樣的:

var schemaExport = new SchemaExport(configuration); 
schemaExport      
    .Execute(
    false, 
    false, 
    false, 
    null, 
    fileStream); 

這將基本上是這樣的(取決於您使用的RDM)

create table ITEM_ITEM_GROUP(
    ITEM_GROUP_ID int not null, 
    IG_INDEX int not null, 
    ITEM_ID int, 
    primary key (ITEM_GROUP_ID, IG_INDEX) 
) 

alter table ITEM_ITEM_GROUP 
    add constraint FKXXXX 
    foreign key (ITEM_GROUP_ID) 
    references YOUR_ENTITY 

alter table ITEM_ITEM_GROUP 
    add constraint FKXXXX 
    foreign key (ITEM_ID) 
    references ITEM 

我可能錯過了一些東西。所以最好讓Hibernate創建模式並查看生成的SQL。

+0

有點混亂。我可否知道你寫了哪個lanuge?是java, – 2010-06-30 07:11:13

+0

對不起,這是C#。它可能看起來類似於Java,我修復它。 – 2010-06-30 09:57:13

1

所以你只是想將該列添加到表中?使用ALTER TABLE聲明:

ALTER TABLE table_name 
ADD column_name datatype 

http://w3schools.com/sql/sql_alter.asp

+0

對於「常規」屬性爲真,但多對多列表不是列,而是鏈接表。 – 2010-06-30 07:01:18

+0

但我不認爲這是屬性類型集合的解決方案。以上XML語句的列名是什麼。問題是如何設置兩個表之間的關係。 – 2010-06-30 07:02:02

+0

我的歉意,我應該更密切關注給出的映射。你上面給出的語法 – 2010-06-30 10:40:08

相關問題