2012-01-31 24 views
2

我使用hbm2ddl通過包括這條線在配置上自動創建的模式:問題與發展環境中使用就是hbm2ddl

<prop key="hibernate.hbm2ddl.auto">create</prop> 

我有一個實體bean定義爲:

@Entity 
@Table(name = "user") 
public class User { 

    @Column(name = "firstname") 
    private String firstName; 

    @Column(name = "lastname") 
    private String lastName; 

    private String fullName; 

} 

有3屬性,我喜歡前兩個保存在數據庫表中,並喜歡計算第三個。當我運行hbm2ddl時選項爲create它創建了所有3列,但我沒有在第三個列表上註釋@Column

如何防止Hibernate創建最後一個屬性作爲列?

+0

Hibernate將始終爲屬性創建列,而不管它們是否註釋爲@Column。正如你所看到的,唯一的辦法就是明確地告訴Hibernate你想從映射中排除一個屬性。 – 2012-01-31 17:27:12

回答

3

@Transient肯定會阻止它。

+0

我從未註釋過全名,我甚至嘗試刪除模式並重新創建它。 @瞬間做了詭計。謝謝 – Siva 2012-01-31 17:20:47

2

@Column註釋並不意味着該字段將被保留。它只是增加了更多信息爲模式生成器。

如果你不想一個字段被保留(仍然,你用你的實體字段訪問)做,您應該標註它@Transient爲寧姆指出,或使用Java transient關鍵字。

+0

從來沒有注意到之前,我一直在不加思索地加入瞬態的 – NimChimpsky 2012-01-31 17:32:18

+0

@NimChimpsky,當然有一個問題我們在說什麼版本的Hibernate。也許在Hibernate遵循JPA之前,其行爲有所不同?至少這是JPA 2.0規範告訴我們的有關持久化字段的內容:*「映射註釋**不能**應用於'瞬態'或'瞬態'字段或屬性'」*和*「所有非瞬時'沒有用'Transient'註釋來註釋的實例變量是** persistent **。「* – 2012-01-31 17:39:56