首頁>Program>source

我有一个關於Hibernate使用的簡單問题.通過註釋類的欄位以及註釋對應的bean的get方法,我不斷看到人们以两種方式之一使用JPA註釋。

我的問题如下:使用JPA註釋(例如@Id),註釋欄位和bean方法之間是否有區別。

示例:

@Entity
public class User
{
**@ID**
private int id;
public int getId(){
return this.id;
}
public void setId(int id){
this.id=id;
}
}

-----------或-----------

@Entity
public class User
{

private int id;
**@ID**
public int getId(){
return this.id;
}
public void setId(int id){
this.id=id;
}
}
最新回復
  • 5月前
    1 #

    是的,我相信您想搜尋欄位訪問權限和屬性訪問權限:

    休眠註釋-欄位或屬性訪問哪个更好?

    Spring首選項是欄位訪問.是我遵循的。

  • 5月前
    2 #

    是的,如果您註釋欄位,則Hibernate將使用欄位訪問来設置和获取這些欄位.如果您對方法进行註釋,休眠將使用getter和setter方法. Hibernate將根据 @Id的位置選擇訪問方法 註解,据我所知,您無法混搭.如果您用 @Id註釋欄位 ,方法註釋將被忽略,反之亦然.您還可以使用類級別註釋 @AccessType手動設置方法

    事實證明,《 Hibernate Annotations參考指南》是一个非常有用的資源,它详细說明了訪問型別如何沿層次結構向下層叠。

  • 5月前
    3 #

    我的建議是對方法进行註釋.這樣,您將获得一點靈活性.例如,假設您有几个Class程:

      AbstractEntity

      StringIdEntity

      AutoIdEntity

      AbstractEntity 定義id欄位/ getter / setter.類 StringIdEntityAutoIdEntityAbstractEntity繼承 ,但請使用其他 @Id 策略.如果註釋该欄位,則不能將其从類更改為另一个.

      如果您註釋方法,則將 getId()標記為 作為 @Transient/abstractAbstractEntity 然後在子類中,您只需覆盖方法並應用您希望使用的策略.我曾经自己對欄位进行註釋,並遇到了這種情况,並決定我將始终對前进的方法进行註釋.

      因此,即使您没有立即看到使用註釋方法的好處,但是当您拥有太多的類時,轉換可能会變得很頭疼。

  • 5月前
    4 #

    您為什麼要註釋訪問器? 它看起来很雜亂,很难維護.現在,我必须遍歷全班,以了解如何應用JPA或Hibernate.当使用某些用於Eclipse的Hibernate代碼生成插件時,這是預設設置,它会驅動我疯狂。

    更不用說我们使用訪問器的另一个原因是將邏輯添加到屬性訪問或引用父物件或其他物件,而這些物件与所述註釋不能很好地融合在一起。

  • 5月前
    5 #

    有很多讨論可以给出 在屬性上使用FIELD的優势(請參阅-http://java.dzone.com/tips/12-feb-jpa-20-why-accesstype).甚至spring框架也建議在屬性上使用FIELD(請參阅-http://static.springsource.org/spring/docs/2.5.x/reference/orm.html)。 我發現FIELD的方法更加簡潔,這不仅是因為您没有被迫實現setter / getter,而且可以在類中使用自定義型別setter / getter。 因此,更好的封裝和更干净的類.在效能方面,FIELD在PROPERTy方面略有優势,但可以忽略不計。

    在一行中使用FIELD代替PROPERTy.如果您確實需要,請使用屬性.

  • c#:配置JSONNET以忽略DataContract / DataMember屬性
  • encoding:MIME編碼的帶引號的可print文字中的" = C2 = A0"是什麼?