hibernate - 如何使用 hibernate 将嵌套类映射到单个数据库表中?

标签 hibernate inner-classes hbm

我只有名为 Employee 的表名,该表具有所有地址属性,我想使用 hibernate 员工表和地址属性的内部类进行映射。

<property name="clientMark" column="CLIENT_MARK"/>
<property name="Address.street1" column="B_STREET_ADDRESS_1"/>
<property name="Address.street2" column="B_STREET_ADDRESS_2"/>
<property name="Address.city" column="B_CITY"/>
<property name="Address.state" column="B_STATE"/>
<property name="Address.postalCode" column="B_POSTAL_CODE"/>
<property name="Address.country" column="B_COUNTRY"/>

最佳答案

如果我理解正确的话,你必须这样做:

public class Employee {
    private String clientMark;
    private Address address;

    public String getClientMark() {
        return clientMark;
    }

    public void setClientMark(String clientMark) {
        this.clientMark = clientMark;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public static class Address {
        private String street1;
        private String street2;

        public String getStreet1() {
            return street1;
        }

        public void setStreet1(String street1) {
            this.street1 = street1;
        }

        public String getStreet2() {
            return street2;
        }

        public void setStreet2(String street2) {
            this.street2 = street2;
        }
    }
}

将内部类设为公共(public)和静态,这样您就可以从其他类创建新对象。然后在外部类中为内部类添加setter和getter方法,hibernate将能够设置和获取对象。接下来您需要编辑 .hbm.xml 文件:

    <property name="clientMark" column="CLIENT_MARK"/>
    <component name="address">
        <property name="street1" column="B_STREET_ADDRESS_1"/>
    </component>
    <component name="address">
        <property name="street2" column="B_STREET_ADDRESS_2"/>
    </component>

hibernate 注解 <component>表示命名变量将是具有一些变量的类(hbm.xml 文件中的 <property>)。在此之后,您可以像这样测试您的代码:

    Employee entity = new Employee();
    entity.setClientMark("client_mark");
    Employee.Address address = new Employee.Address();
    address.setStreet1("street1");
    address.setStreet2("street2");
    entity.setAddress(address);
    // entity is ready to be saved

您在数据库中的结果将是:

|------------------------------------------------------------|
| id | CLIENT_MARK | B_STREET_ADDRESS_1 | B_STREET_ADDRESS_2 |
|------------------------------------------------------------|
| 1  | client_mark | street1            | street2            |
|------------------------------------------------------------|

希望对你有帮助...☺

关于hibernate - 如何使用 hibernate 将嵌套类映射到单个数据库表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45818111/

相关文章:

java - 为简单功能创建内部类是一种好习惯吗?

hibernate - 将 hibernate 4 与 hbm.xml 和 xsd 一起使用

java - org/hibernate/HibernateException : Unsupported major. 次要版本 52.0(无法加载类 org.hibernate.HibernateException)

java - 内部类声明和初始化

Java Spring hibernate HQL where 子句不起作用

android - 如何运行使用内部类的线程?

java - Hibernate - <property> 值与 <column> 值

java - 在 HQL 中使用 NOT IN 子句删除

java - com.ibm.db2.jcc.am.SqlTransactionRollbackException : DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001,SQLERRMC=68,DRIVER=3.65.110