2014-09-10 65 views
1

這個問題的性質是非常相似的一問here休眠 - 如何堅持其映射結合式

有人能提供一些線索爲爲什麼休眠決定忽略的財產,其中有一個公式,完全而持續。如果是這樣,堅持一個有公式的財產的選擇是什麼?有沒有額外的配置?

查詢由Hibernate觸發:

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

注休眠如何忽略插入查詢,其在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+ "]"; 
     } 


} 

回答

0

按照hibernate documentation它說:

5.1.4.2。屬性映射與的hbm.xml

式(可選):SQL表達式,用於定義 計算屬性的值。計算屬性沒有自己的列映射 。

因此,帶有Formula的屬性在DB表中不能有列映射。作爲替代方案,您可以擁有另一個可以保存其值的屬性,並且可以將此新屬性映射到您的數據庫表列。

+0

Thankyou Chaitanya。然而,在嘗試保存記錄時,休眠在嘗試插入之前不會觸發選擇。所以,即使我創建另一個只讀字段 - 說nameReadOnly,並有它的公式,並在其setter設置通過公式獲得的值命名。這個setter不會被調用,因爲hibernate在插入前不會觸發select。 – Nohsib 2014-09-10 19:16:11