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

标签 java mysql hibernate

我有一个 MySQL 数据库,其中包含两个表:contactsaddresses。表 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
}

最佳答案

您需要将 @JoinColumn(name = "id")Address 中的 @ManyToOne 一起使用。

通过将mappedBy 添加到addresses,您可以让子级拥有该关系。当您提到 JoinColumn 时,您是在告诉哪些列在数据库中保存实际关系。

此外,您正在谈论 contact_id,但我在您的映射中看不到它。

关于java - Hibernate:重命名 @ManyToOne 关系中自动生成的 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21945477/

相关文章:

java - 带有可序列化对象的 IOException

java.util.ConcurrentModificationException 从数组列表中删除元素时,即使使用迭代器

mysql - 如何在 ARM 模板中配置 ClearDb MySQL 数据库的密码和用户名

php - 选择和插入数据时保护 php 和 sql

mysql - JPA 和 Hibernate - 复合主键与外键

java - XStream 中没有已知类类型的注释

java - boolean 值不变

mysql - 在 MySQL 中的表中插入 x 行

java - 如何在 Spring Boot Hibernate Multi-Tenancy 应用程序中使用 C3P0 来管理连接池?

java - 带有 @Transactional 注释的 Spring OpenSessionInViewFilter