【发布时间】:2019-08-15 19:19:13
【问题描述】:
我正在 Spring RESTfull API 中创建 @CollectionTable。我有一个名为 University 的实体表。现在我正在创建一个名为 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 和 UniversitiesOneToMany 关系/strong> 并且此关系将存储在名为 targeted_univeristy_ids 的单独表中。
我可以成功创建关系表,根据需要设置表名,也可以设置连接列名(TargeredGift实体的主键)。但我无法为映射实体(大学)的主键设置名称。 Hibernate 自动生成一个名称为universityid_university_id。我希望将其更改为仅university_id'.
我在互联网上搜索了这个问题,发现很少有与我的问题相关的线程与Stackoverflow 相关联,这有助于我为 TargetedGift 实体的joinColumn 设置名称。到目前为止,我的 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?
【问题讨论】:
标签: java hibernate jpa spring-data-jpa