素材牛VIP会员
@StaticMetamodel注释有什么用
 wa***10  分类:Java代码  人气:925  回帖:1  发布于6年前 收藏
import javax.annotation.Generated;
import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Role.class)
public abstract class Role_ extends DomainBase_ {

    public static volatile SingularAttribute<Role, String> roleName;
    public static volatile ListAttribute<Role, Resource> resources;
    public static volatile SingularAttribute<Role, String> comment;
    public static volatile SingularAttribute<Role, String> id;
    public static volatile ListAttribute<Role, User> users;

}
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.Table;



@Entity
@Table(name = "role")
public class Role extends DomainBase {
    @Id    
    private String id;
    @Column(columnDefinition="varchar(255) NOT NULL COMMENT '角色名'")
    
    private String roleName;
    @Column(columnDefinition="varchar(255)  COMMENT '备注'")
    private String comment;
    
    @ElementCollection
    @CollectionTable(name="resource",joinColumns=@JoinColumn(name="roleId"))
    private List<Resource> resources=new ArrayList<>();
    
    @ManyToMany(mappedBy="roles")
    private List<User> users =new ArrayList<>();
        
}

这两个类有什么区别,@StaticMetamodel是怎么用的

 标签:hibernatejpajava

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv5 码农
谁***哥 Web前端工程师 6年前#1

这是JPA Criteria API的一部分

JPA Criteria API 是JPA中用于构建OOP风格的,较为灵活的SQL的一部分.其中包含Metamodel API,该API用于对Entity进行建模,JPA Criteria API有两种使用方式

  • 强类型方式,即使用Metamodel来获得Entity的属性和域
  • 基于字符串方式,直接使用属性名或域名来获得

@StaticMetamodel(Role.class)注解表明Role_Role的Metamodel.也就是说在构建Criteria查询的时候如下的语句来指定where条件

cq.where(role.get(Role_.roleName).in("admin", "superadmin"));
//相当于 ···WHERE role_name IN ('admin','superadmin')
//cq 是一个CriteriaQuery实例

参考 Java EE 8 Tutorial by Oracle / Using the Metamodel API to Model Entity Classes
https://javaee.github.io/tuto...

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取