2013-10-31 95 views
15

我想弄清楚這個代碼大約兩個小時了,例如在下面的類中,這些字段代表什麼?什麼是@StaticMetamodel和SingularAttribute <Obj,Obj>?

import java.util.Date; 
import javax.persistence.metamodel.ListAttribute; 
import javax.persistence.metamodel.SingularAttribute; 
import javax.persistence.metamodel.StaticMetamodel; 
import java.util.UUID; 

@StaticMetamodel(Address.class) 
public class Address_ extends { 
    public static volatile SingularAttribute<Address, Long> id; 
    public static volatile SingularAttribute<Address, UUID> personId; 
    public static volatile SingularAttribute<Address, Person> person; 
} 

Address.class是一個java類,它具有以下定義:

@Entity 
@Table(name = "address", schema = "public") 
public class Address{ 
    private Long id; 
    private Person person; 
    private UUID personId; 
    //.... 
} 

你能不能,請解釋一下什麼是用於@StaticMetamodel@SingularAttribute註解?這可能很簡單,但我不明白。

回答

17

作爲每documentation

靜態元模型是一系列類,「鏡像」的實體 和embeddables在領域模型中,並提供至約鏡像類的屬性的 元數據的靜態的訪問。

靜態元模型具有以下屬性:

  • 對於每個被管理X類中包p,在包p一個元模型類X_被創建。
  • 對於由X類,其中的y類型是Y聲明每持久非集合值屬性y,元類必須包含的聲明如下:

SingularAttribute例如:

public static volatile SingularAttribute<X, Y> y; 

靜態元模型對於使用JPA的Criteria API創建類型安全查詢非常有用。

例如,我們有以下兩個實體,OrderItem

@Entity 
public class Order { 
    @Id 
    @GeneratedValue 
    Integer id; 

    @ManyToOne 
    Customer customer; 

    @OneToMany 
    Set<Item> items; 

    BigDecimal totalCost; 

    // accessors 
} 

Item實體:

@Entity 
public class Item { 
    @Id 
    @GeneratedValue 
    Integer id; 

    int quantity; 

    @ManyToOne 
    Order order; 

    // accessors 
} 

這裏是一個類型安全的條件查詢,建立與標準API:

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
CriteriaQuery<Order> cq = cb.createQuery(Order.class); 
SetJoin<Order, Item> itemNode = cq.from(Order.class).join(Order_.items); 
cq.where(cb.equal(itemNode.get(Item_.id), 5)).distinct(true); 

注意用法Item_.idOrder_.item。那些訪問靜態靜態元模型屬性(它鏡像實體屬性),這樣確保查詢是正確構建。

+0

謝謝你的回答。我無法理解這部分'提供靜態訪問元數據'我的意思是我們在這裏獲得什麼?爲什麼不應該使用實體本身?我可以使用元模型進行存檔,我無法以其他方式獲得它? – MoienGK

+0

是關於併發性嗎? – MoienGK

+0

不,這意味着你不應該實例化一個實體對象,以獲取字段的元數據。 –

相關問題