gpt4 book ai didi

java - 集合的自定义 Hibernate 插入,@WhereJoinTable 的对应物

转载 作者:搜寻专家 更新时间:2023-11-01 03:23:13 26 4
gpt4 key购买 nike

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

问题:

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

我想做的是将 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<>();

Thisthis文章也很有帮助(注意插入语句中列的顺序)。

关于java - 集合的自定义 Hibernate 插入,@WhereJoinTable 的对应物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com