Java 集合的自定义Hibernate插入,与@WhereJoinTable对应

Java 集合的自定义Hibernate插入,与@WhereJoinTable对应,java,hibernate,jpa,Java,Hibernate,Jpa,我试图在联接表上映射具有额外属性(标志)的关系,但没有在实体中显式定义此联接表 问题: 业务分配给0个或1个主要国家/地区,业务还链接到0个或多个次要国家/地区 我有三个表格:业务,国家,业务_国家 在我的业务中,我有一个@WhereJoinTable,它非常适合检索: @OneToOne @JoinTable( name="business_country", joinColumns = @JoinColumn( name="business_id"),

我试图在联接表上映射具有额外属性(标志)的关系,但没有在实体中显式定义此联接表

问题:

业务分配给0个或1个主要国家/地区,业务还链接到0个或多个次要国家/地区

我有三个表格:
业务
国家
业务_国家

在我的
业务
中,我有一个
@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<>();
我想做的是,对于
mainCountry
,将u main设置为
1
,对于
Secondary Country
中的所有条目,将其设置为
0

我想知道自定义的
@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<>();
@OneToOne
@可接合(
name=“业务\国家”,
joinColumns=@JoinColumn(name=“business_id”),
inverseJoinColumns=@JoinColumn(name=“country\u id”)
)
@其中可接合(子句=“is_main=1”)
@SQLInsert(sql=“插入到业务\国家(业务\国家id,国家id,是主)值(?,1)”)
私人国家;
@独身癖
@可接合(
name=“业务\国家”,
joinColumns=@JoinColumn(name=“business_id”),
inverseJoinColumns=@JoinColumn(name=“country\u id”)
)
@其中jointable(子句=“is_main=0”)
@SQLInsert(sql=“插入到业务\国家(业务\国家id,国家id,是主)值(?,0)”
私有集secondaryCountries=新HashSet();
文章也会有所帮助(注意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<>();