我正在尝试在连接表上映射具有额外属性(标志)的关系,但没有在实体中明确定义此连接表。
问题:
业务分配到0或1个主要国家/地区,业务也与0个或更多个次要国家/地区相关联。
我有三个表:Business
,Country
,Business_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设置为mainCountry
,0
的所有条目设置为secondaryCountries
。
我想知道是否有可能使用自定义@SQLInsert
?
答案 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<>();