2014-01-09 86 views

回答

3

我假設你只想在數據庫中只保留一個類的字段子集。 您可以使用@Transient 註釋來標記您不希望保留的字段。

警告:一定要尊重這些領域可能未初始化(因爲當他們加載它們在DB沒有價值)

+0

感謝編輯kostja,你打我吧;) – SirRichie

1

我沒有檢查,但我不明白爲什麼你能否留下一些未映射的字段,特別是如果它們不作爲表格中的列存在。 當然,在某些情況下,您需要將列映射到該字段,例如,當列不能爲空時,在保存期間你會得到一個異常。

1

在休眠中,如果沒有以任何其他方式描述,所有字段將被映射。因此,人們可以指向ORM映射器不使用你的POJO類的

[@Transient][1] annotation in case JPA is used 
or even the **transient** keyword from java - careful when using this one, it will prevent the given field to be serialized 
9

是的,你可以映射幾個字段到您的表列不是Problem.It將在DB成功給存儲領域的數據庫映射。

實施例:

下面是StudentData POJO的

public class StudentData1 { 
private String name; 
private int id; 
private String name1; 
setters & Getters 
} 

和HBM文件:

<class name="example.StudentData" table="StudentData"> 
<id name="id" column="pid" > 
<generator class="assigned" /></id> 
<property name="name" column="pname" /> 
</class> 

和CFG文件是

<mapping resource="StudentData.hbm.xml"/> 

和主類是

public static void main(String[] args) { 
    SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory(); 
    Session session = factory.openSession(); 
    StudentData1 s = new StudentData1(); 
    s.setId(1); 
    s.setName("iPhone"); 
    Transaction tx = session.beginTransaction(); 
    session.save(s); 
    System.out.println("Object saved successfully.....!!"); 
    tx.commit(); 
    session.close(); 
    factory.close(); 
} 

您可以運行此代碼,它將執行並只存儲兩個字段。

+0

所以它的意思是,whateva映射我們已經在hbm文件中完成,只有那些字段和列會在事務中發生.......好..有道理..謝謝你:) –

+0

@KP_JavaDev歡迎。如果這個答案對你的答案有用,那麼這個答案會對其他人有幫助。 – Prabha

+1

是的,謝謝。這個答案很有用:) :) –

相關問題