簡體   English   中英

在具體的JPA類之間共享Java實現的最佳方法?

[英]Best way to share Java implementation between concrete JPA classes?

我的J2EE應用程序中大約有10個不同的實體,它們現在共享完全相同的實現。 它們都繼承自已注釋為@MappedSuperclass的同一泛型抽象類,但此類不包含我在所有具體子類中都重復過的實現。

如果可以的話,我會將所有各個字段和集合放在此抽象超類上,因此也將實現方法放在那里-全部放在一個位置而不是10個位置。但是,由於JPA限制, 我無法將JPA批注添加到通用字段或訪問者。

盡管我通常通常偏向於委托來實現繼承,但是由於另一個JPA限制,即您不能在集合中包含嵌入式實體,所以使用委托的想法也行不通。

當我只有3-4個這樣的實體和2-3個方法時,這沒什么大不了的,但是現在我只有大約10個-大約有7-8個方法...而且其中一些方法正在變得越來越復雜。 我正在使用的“剪切復制粘貼”繼承確實很糟糕。

還有其他好主意嗎?

  1. 仔細檢查這些“限制”是否真正適用於您的JPA提供者。 我已經將對象嵌入到集合中,並且很好(使用Hibernate)。 我有一個帶有映射字段的@MappedSuperclass

  2. 您可以嘗試省略@MappedSuperclass ,並使用適當的繼承層次結構@MappedSuperclassabstract一個@Entity

事實證明,只要您確保對JPA批注使用屬性訪問模式,就可以使用實現繼承或委托。 我使用JPA注釋的字段訪問模式,這使我無盡痛苦,因為我無法注釋通用字段類型。

但是,使用屬性訪問模式,我只創建了通用抽象實現,而沒有將其注釋為實體,mappedsuperclass,可嵌入或任何其他形式。 這樣,JPA將忽略它。 然后,在具體的子類中,根據需要創建受保護的getter和setter方法,並將JPA注釋放在這些方法上。

原來看似簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM