Hibernate:在@ManyToOne关系中重命名自动生成的Id

时间:2014-02-21 21:24:36

标签: java mysql hibernate

我有一个包含两个表的contactsaddresses的MySQL数据库。表addresses包含一个大整数类型的列contactid,用于与contact表连接。

我在Hibernate中有以下实体,具有双向OneToMany - ManyToOne关系。问题是@ManyToOne关系在我的数据库中创建了另一个类型为整数的contact_id列。我想使用现有的contactid列而不是contact_id,所以我认为我应该将自动生成的contact_id列重命名为contactid,但我不知道是否这是可能的......

有没有办法在不修改数据库的情况下解决这个问题?

提前致谢。

@Entity
@Table(name="contacts")
public class Contact implements Serializable {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    @Column(name="name")
    private String name;

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="contact")
    private List<Address> addresses= new ArrayList<Address>();

    // getters and setters
}


@Entity
@Table(name="addresses")
public class Address implements Serializable {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;

    @Column(name="street")
    private String street;

    @Column(name="postalcode")
    private String postalcode;

    @ManyToOne
    private Contact contact;

    // getters and setters
}

1 个答案:

答案 0 :(得分:1)

您需要@JoinColumn(name = "id")以及@ManyToOne中的Address

通过将mappedBy添加到addresses,您可以让孩子拥有关系。当你提到JoinColumn时,你告诉我们在DB中保存实际关系的列是什么。

另外,你在谈论contact_id但我在你的地图中看不到。