2014-04-25 58 views
4

我試圖在連接表上映射與額外屬性(標誌)的關係,但沒有在實體中明確定義此連接表。自定義Hibernate插入集合,與@WhereJoinTable對應

問題:

業務被分配到0或1的主要國家,業務也被鏈接到0以上的二級國家。

我有三個表:BusinessCountryBusiness_Country

在我Business,我有一個@WhereJoinTable其用於檢索的作品相當不錯:

@OneToOne 
@JoinTable(
     name="business_country", 
     joinColumns = @JoinColumn(name="business_id"), 
     inverseJoinColumns = @JoinColumn(name="country_id") 
) 
@WhereJoinTable(clause="is_main = 1") 
private Country mainCountry; 

@OneToMany 
@JoinTable(
     name="business_country", 
     joinColumns = @JoinColumn(name="business_id"), 
     inverseJoinColumns = @JoinColumn(name="country_id") 
) 
@WhereJoinTable(clause="is_main = 0") 
private Set<Country> secondaryCountries = new HashSet<>(); 

我不知道對方會是這樣@WhereJoinTable什麼執行保存。

剛剛創建實體Business並添加國家,它提供了約束衝突:

cannot insert NULL into ("TESTSCHEMA"."BUSINESS_COUNTRY"."IS_MAIN") 

我想要做的是,is_main設置爲1mainCountry0在所有條目secondaryCountries

我想知道是否有某種可能的自定義@SQLInsert

回答

1

您可以使用@SQLInsert指定關聯表的自定義SQL INSERT語句:

@OneToOne 
@JoinTable(
     name="business_country", 
     joinColumns = @JoinColumn(name="business_id"), 
     inverseJoinColumns = @JoinColumn(name="country_id") 
) 
@WhereJoinTable(clause="is_main = 1") 
@SQLInsert(sql = "insert into business_country (business_id, country_id, is_main) values (?, ?, 1)") 
private Country mainCountry; 

@OneToMany 
@JoinTable(
     name="business_country", 
     joinColumns = @JoinColumn(name="business_id"), 
     inverseJoinColumns = @JoinColumn(name="country_id") 
) 
@WhereJoinTable(clause="is_main = 0") 
@SQLInsert(sql = "insert into business_country (business_id, country_id, is_main) values (?, ?, 0)") 
private Set<Country> secondaryCountries = new HashSet<>(); 

Thisthis文章也可以是有益的(注意列的排序在插入語句)。