我正在尝试在连接表上映射与额外属性(标志)的关系,但没有在实体中明确定义此连接表。
问题:
业务被分配到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")
我想做的是将 mainCountry
的 is_main 设置为 1
并为 中的所有条目设置为
。0
次要国家
我想知道自定义 @SQLInsert
是否可行?
最佳答案
您可以使用 @SQLInsert
为关联表指定自定义sql插入语句:
@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<>();
关于java - 集合的自定义 Hibernate 插入,@WhereJoinTable 的对应物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303861/