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

标签 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")

我想做的是将 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/

相关文章:

java - ExecutorService 导致 JDBC 连接问题

java - 通过编程方式启动Tomcat服务

java - 不使用正则表达式将字符串转换为映射

java - 使用数据库创建企业桌面应用程序的最佳实践

java - JPA/Hibernate native 查询无法识别参数

mysql - JPA 和 Hibernate - 复合主键与外键

java - 使用时间戳会导致 WSDL 生成出现问题

mysql - 如何使用Spring boot和MYSQL为多级菜单列表创建嵌套JSON?

java - MySQL从存储引擎读取自增值失败

java - 没有 FK 的 JPA 关联中的 NULL 处理