2012-02-20 116 views
0

Hibernate映射我不得不屬性被映射到一列沒有吸氣劑

<class name="Account" table="list"> 

    ... 

<property name="creationDate" type="jodaTime" column="accdatetm" insert="false" update="false"/> 
<property name="anotherDate" type="jodaTime" column="accdatetm" insert="false" update="false"/> 

creationDate有setter和getter在Account

anotherDate沒有setter和getter在Account

我得到錯誤

PropertyNotFoundException: Could not find a getter for anotherDate 

如果我不想讓財產擁有吸氣劑和固定劑,但是想擁有財產,我該怎麼辦?

+0

什麼是其在數據庫中的同一列兩個屬性點?如果它有效,那麼這兩個屬性總是具有相同的值。 – 2012-02-20 18:16:50

回答

1

如果我不想要屬性的getter和setter,但想擁有一個屬性,我該怎麼辦?

改變主意,最好使用getter和setter來封裝和維護bean標準。

+0

Clean Code說:如果POJO沒有任何行爲,則不需要accessor(getters,setters)。這被稱爲數據結構類。但是我們不能用於實體,因爲JPA實現者使用通過訪問器工作的代理。 – 2015-05-24 18:58:10

+0

@DanielHárinope。 – NimChimpsky 2015-05-24 19:02:17

+0

你好@NimChimpsky,你能否更詳細地解釋我爲什麼我的陳述是不合理的? – 2015-05-24 20:28:37

0

無論如何,如果你想交互/顯示數據庫字段「createDate」或「anotherDate」,你將需要一個getter。 Hibernate假定你將使用你已經聲明的屬性,並且它告訴你沒有支持的方式讓你使用它而不創建一個getter。如果你不想使用db字段,那麼不要把它作爲XML映射中的一個屬性。如果這不能回答你的問題,請通過引用數據庫中的一個字段來告訴我你試圖完成什麼的更多細節,這聽起來並不像你想要的那樣。希望這可以幫助。

0

正如您所知,Hibernate允許您指定字段或屬性訪問。檢查this但你不能混用同一個實體。如果您想混合使用,請按照上述鏈接中的說明執行您自己的org.hibernate.property.PropertyAccessor。也許你可以從org.hibernate.property.BasicPropertyAccessor開始,並在沒有找到吸氣者或二傳手時委託給org.hibernate.property.DirectPropertyAccessor

至於其他的建議,這是更簡單遵循一個約定而不是通過這一切去,但有時你無法避免瘋狂的情況下:)