2013-10-31 94 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

不,这意味着你不应该实例化一个实体对象,以获取字段的元数据。 –

相关问题