gpt4 book ai didi

java - Hibernate CollectionTable - 如何设置映射表的列名?

转载 作者:行者123 更新时间:2023-12-02 02:07:28 25 4
gpt4 key购买 nike

我正在 Spring RESTfull API 中创建一个 @CollectionTable。我有一个名为大学的实体表。现在我正在创建一个名为 TargetedGift 的实体,其中我将有一个大学 ID 列表,该列表将存储在 PostgreSQL 数据库中。

TargetedGift 实体希望这样:

@Data
@Entity
@Table(name = "targeted_gifts")
public class TargetedGift {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "targeted_gift_id_generator")
@SequenceGenerator(name = "targeted_gift_id_generator",
allocationSize
= 1)
@Column(name="targeted_gift_id")
private int targetedGiftID;

大学实体类会像这样:

@Data
@Entity
@Table(name ="universities")
public class DatabaseUniversity extends BasicEntity {

@Column(name = "university_id")
@Id
private int universityId;

@Column(name = "university_name")
private String universityName;
@ManyToOne
@JoinColumn(name = "city_id")
private DatabaseCity city;
@Column(name = "country_id")
private int country_id;
@Override
public Integer getId() {
return universityId;
}

}

我已经有一个单独的表来存储大学详细信息。在 TargetedGift 实体中,我想创建一个 CollectionTable,它将在 CollectionTable大学<之间具有 OneToMany 关系/strong> 并且此关系将存储在名为 targeted_univeristy_ids 的单独表中。

我可以成功创建关系表,根据需要设置表名称,还可以设置连接列名称(TargeredGift 实体的主键)。但我无法设置映射实体(大学)主键的名称。 Hibernate 自动生成一个名称 universityid_university_id 。我希望将其更改为仅 university_id'.

我在互联网上搜索了这个问题,发现很少有与我的问题相关的线程,这些线程链接到 Stackoverflow这帮助我设置 joinColumn 的名称TargetedGift 实体的。到目前为止,我的 targeted_univeristy_ids 中的列如下所示:

table name: targeted_univeristy_ids
columns name:
-targeted_gift_id
- universityid_university_id

Here is one thread其中有很好的解释来重命名相应的列。

@ElementCollection
@CollectionTable(name = "staff_privileges", joinColumns =
@JoinColumn(name = "id_user"))
@MapKeyColumn(name = "privileges_id")
@Column(name = "privileges_status")
private Map<Integer, Boolean> privileges; // privilegeId <-> isEnabled

按照上面的例子,我明白了@joinColumns指示它所在的当前实体,在我的例子中,TargetedGift和底部@olumn指示外部表的主键,在我的例子中是“大学 id (university_id)”。我按照这个例子,到目前为止得到了我上面提到的结果。目前我的代码如下:

    @OneToMany(fetch = FetchType.LAZY)
@CollectionTable(name = "targeted_univeristy_ids" , joinColumns =
@JoinColumn(name = "targeted_gift_id", referencedColumnName =
"targeted_gift_id"))
//@MapKeyColumn(name = "university_id")
@Column(name = "university_id")
private List<DatabaseUniversity> universityID;

现在我正在寻找一个解决方案来设置大学的id列名称universityid_university_id简单地说university_id

最佳答案

我找到了解决方案。我错误地将其创建为 @CollectionTable,我必须将其创建为 @JoinTable。下面是解决我的问题的代码:

    @OneToMany(fetch = FetchType.LAZY)
@JoinTable(
name="targeted_universities",
joinColumns = @JoinColumn( name="targeted_gift_id"),
inverseJoinColumns = @JoinColumn( name="university_id")
)
private List<DatabaseUniversity> universities;

关于java - Hibernate CollectionTable - 如何设置映射表的列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350696/

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