Hibernate - 如何持久化使用Formula映射的属性

时间:2014-09-10 18:39:16

标签: java hibernate jpa hibernate-mapping

这个问题与here

问题非常相似

有人可以解释为什么hibernate决定忽略具有公式的属性,完全在持久化的同时。如果是这样的话可以选择坚持一个有公式的财产吗?还有其他配置吗?

由hibernate触发的查询:

insert into fighterjet (max_speed, country, jet_id) values (?, ?, ?)

请注意hibernate如何忽略'名称' insert查询中的属性,其中包含hbm中的公式。

HBM:

<hibernate-mapping>
    <class name="com.fighterjet.FighterjetDO" table="fighterjet">
        <id name="jetId" type="int" column="jet_id">
            <generator class="increment" />
        </id>
        <property name="name" formula="Select 'hi' from dual" >
            <column name="name"/>
        </property>
        <property name="maxSpeed">
            <column name="max_speed" />
        </property>
        <property name="country">
            <column name="country" />
        </property>
    </class>
</hibernate-mapping>

班级:

public class FighterjetDO {

    private Integer jetId;

    private String name;

    private Integer maxSpeed;

    private String country;

    public Integer getJetId() {
        return jetId;
    }

    public void setJetId(Integer jetId) {
        this.jetId = jetId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getMaxSpeed() {
        return maxSpeed;
    }

    public void setMaxSpeed(Integer maxSpeed) {
        this.maxSpeed = maxSpeed;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
        public String toString() {
            return "FighterJet [Jet_id=" + jetId + ", Name=" + name
                    + ", Max Speed=" + maxSpeed + ", Country=" + country+ "]";
        }   


}

1 个答案:

答案 0 :(得分:0)

根据hibernate documentation,它说:

<强> 5.1.4.2。使用hbm.xml进行属性映射

  

formula(可选):一个SQL表达式,用于定义a的值   计算属性。计算属性没有列映射   他们自己的。

因此Formula的属性不能在DB表中有列映射。作为替代方案,您可以拥有另一个可以保存其值的属性,并且可以将此新属性映射到数据库表列。