【问题标题】:How to join fields of two tables using Hibernate?如何使用 Hibernate 连接两个表的字段?
【发布时间】:2014-03-12 03:30:54
【问题描述】:

我有两个表和相关的 Java 映射。

CREATE TABLE country (
    code VARCHAR(3) PRIMARY KEY NOT NULL,
    name VARCHAR(100) NOT NULL
);


CREATE TABLE user (
    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    country_code VARCHAR(3),
    FOREIGN KEY ( country_code ) REFERENCES country ( code )
);

这是我的 Java 实体。国家 POJO:

@Entity
@Table(name = "country")
public class Country {

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

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

和用户 POJO:

@Entity
@Table(name = "user")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

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

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

问题是如何在 Hibernate 中使用注解将Contry.code 加入到User.countryCode?当我使用 Hibernate 创建用户对象时,我需要自动绑定这两个字段(代码和国家代码)。

【问题讨论】:

    标签: java hibernate hibernate-annotations


    【解决方案1】:

    您需要从CountryUser 实体的@OneToMany 映射以及从UserCountry 的相应@ManyToOne 映射:

    @Entity
    @Table(name = "country")
    public class Country {
    
        @Id
        @Column (name = "code")
        private String code;
    
        @Column (name = "name")
        private String name;
    
        @OneToMany(mappedBy = "country")
        private Set<User> users;
    }
    
    @Entity
    @Table(name = "user")
    public class User implements Serializable {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer id;
    
        @Column(name = "name")
        private String name;
    
        @ManyToOne
        @JoinColumn(name = "country_code")
        private Country country;
    }
    

    【讨论】:

    • 但我只需要一个 countryCode 而不是 Country 对象。
    • @user3279337 这是在休眠中创建实体之间映射的方式。您可以从country 参考中获取countryCode
    • @user3279337 顺便说一句,这只是一个非常基本的映射。您可以提供更多选择。您可能需要通过 hibernate 文档了解更多信息。
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2011-10-15
    • 2012-08-20
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多