用于集合的自定义Hibernate插入,与@WhereJoinTable相对应

时间:2014-04-25 22:07:45

标签: java hibernate jpa

我正在尝试在连接表上映射具有额外属性(标志)的关系,但没有在实体中明确定义此连接表。

问题:

业务分配到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")

我想要做的是1的is_main设置为mainCountry0的所有条目设置为secondaryCountries

我想知道是否有可能使用自定义@SQLInsert

1 个答案:

答案 0 :(得分:2)

您可以使用@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文章也很有用(请注意插入语句中列的排序)。