【问题标题】:Hibernate creates redundant column in databaseHibernate 在数据库中创建冗余列
【发布时间】:2020-03-05 12:50:17
【问题描述】:

我在一个房间管理软件中工作,我想知道某栋大楼的房间。

在建筑实体中@OneToMany关系:

   @JsonBackReference(value= "room")
   @OneToMany(targetEntity=Room.class, mappedBy="building", fetch=FetchType.EAGER,cascade = 
              CascadeType.REMOVE,orphanRemoval = true)
   public Set<Room> getRooms() {
       return this.rooms;
}

与房间实体中@ManyToOne的关系:

@JsonManagedReference(value= "room")
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="building_number", nullable=false)
@OnDelete(action = OnDeleteAction.CASCADE)
public Building getBuilding() {
    return this.building;
}

由于这些关系,自动生成的数据库会生成一个额外的字段,我只想将它们映射到 Room.building_number:

building_building_number 我只需要 building_number。

【问题讨论】:

  • 您的代码似乎正确,它应该只生成一列。您确定该列是每次生成的,而不是以前版本生成的列,并且一直保留吗?你能不能把它删掉,看看它是否被重新创建?
  • 是的,每次都会重新创建该列。
  • 我有一些完全一样的代码,它可以工作。唯一的区别是我没有@OnDelete 注释,只有普通的JPA
  • 如果没有@OnDelete,它也会创建此列。

标签: java spring hibernate relationship hibernate-mapping


【解决方案1】:

尝试使用类似的东西:

建筑类:

@OneToMany(mappedBy="building")
private Set<Room> rooms;

// getters and setters

Room.class:

@ManyToOne
@JoinColumn(name="building_number", nullable=false)
private Building building;

// getters and setters

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多