Java Hibernate CollectionTable-如何设置映射表的名称';谁的列名?

Java Hibernate CollectionTable-如何设置映射表的名称';谁的列名?,java,hibernate,jpa,spring-data-jpa,Java,Hibernate,Jpa,Spring Data Jpa,我正在Spring RESTfull API中创建一个@CollectionTable。我有一个名为University的实体表。现在我正在创建一个名为TargetedGift的实体,其中我将有一个大学id列表,该列表将存储在PostgreSQL数据库中 TargetedGift实体希望: @Data @Entity @Table(name = "targeted_gifts") public class TargetedGift { @Id @Generate

我正在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;
    }
大学实体课程希望:

@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关系,该关系将存储在一个名为targeted\u univeristy\u id的单独表中

我可以成功地创建关系表,根据需要设置表名,还可以设置联接列名(targetedgift实体的主键)。但我无法设置映射实体(大学)主键的名称。Hibernate自动生成一个名为
universityid\u university\u id
。我想将此更改为仅
university\u id.

我在互联网上搜索了这个问题,发现了一些与我的问题相关的线程,它们链接到
Stackoverflow
,帮助我设置TargetedGift实体的
joinColumn
。到目前为止,我的目标大学ID中的列如下所示:

@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;
    }
表名:目标大学ID
列名称:
-目标\u礼物\u id
-大学id

这对重命名相应的列有很好的解释

@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

现在我正在寻找一种解决方案,将大学id列名从
universityid\u university\u id
设置为简单的
university\u 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;
@OneToMany(fetch=FetchType.LAZY)
@可接合(
name=“目标大学”,
joinColumns=@JoinColumn(name=“targeted\u gift\u id”),
inverseJoinColumns=@JoinColumn(name=“university\u id”)
)
私立大学名单;