【问题标题】:Hibernate - How to persist a property which is mapped with FormulaHibernate - 如何保持使用公式映射的属性
【发布时间】:2014-09-10 18:39:16
【问题描述】:

这个问题与here提出的问题非常相似

有人可以解释为什么hibernate决定忽略具有公式的属性,同时完全坚持。如果是这样,有什么替代方案可以保留具有公式的属性?有什么额外的配置吗?

休眠触发的查询:

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

注意 hibernate 如何忽略插入查询中的“name”属性,该查询在 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+ "]";
        }   


}

【问题讨论】:

    标签: java hibernate jpa hibernate-mapping


    【解决方案1】:

    根据hibernate documentation 它说:

    5.1.4.2。与 hbm.xml 的属性映射

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

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

    【讨论】:

    • 谢谢柴坦亚。但是,在尝试保存记录时,hibernate 在尝试插入之前不会触发选择。因此,即使我创建另一个只读字段 - 说 nameReadOnly 并为其设置公式,并在其设置器中将通过公式获得的值设置为名称。这个设置器根本不会被调用,因为休眠不会在插入之前触发选择。
    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 2011-02-28
    • 2023-03-26
    • 1970-01-01
    • 2011-06-22
    • 2011-09-02
    相关资源
    最近更新 更多