我是靠谱客的博主 朴素洋葱,最近开发中收集的这篇文章主要介绍JPA中@Access注解小结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

JPA规范中可以通过@Access注解的来指定实体类的访问策略。

/**
 * Used to specify an access type to be applied to an entity class,
 * mapped superclass, or embeddable class, or to a specific attribute
 * of such a class.
 *
 * @since Java Persistence 2.0
 */
@Target( { TYPE, METHOD, FIELD })
@Retention(RUNTIME)
public @interface Access {

    /**
     * (Required)  Specification of field- or property-based access.
     */
    AccessType value();
}

@Access注解中可以接收两种AccessType类型的值:AccessType.FIELD和AccessType.PROPERTY。

AccessType.FIELD指通过类中的字段来获取对应的表字段信息。此时,JPA只关注类中的字段名,并转换为对应的表字段信息,而不会读取getter方法和setter方法上的表字段注解信息。如:

@Entity 
@Table(name="t_user") 
@Access(AccessType.FIELD)
public class User implements Serializable { 
    private static final long serialVersionUID = 1L; 
   
    @Id 
    @GeneratedValue 
    private Long id; 
    @Column(name="name", length=30) 
    private String name; 
    @Column(name="age", nullable=false) 
    private int age; 
    
    public Long getId() { 
        return id; 
    } 
 
    public void setId(Long id) { 
        this.id = id; 
    } 

    public String getName() { 
        return name; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 

    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
}

AccessType.PROPERTY指通过类中的getter方法和setter方法来获取对应的表字段信息。此时,JPA只关注类中getter方法和setter方法上的表字段注解信息,并转换为对应的表字段信息。如:

@Entity 
@Table(name="t_cat") 
@Access(AccessType.PROPERTY)
public class Cat implements Serializable { 
    private static final long serialVersionUID = 1L; 
   
    private Long id; 
    private String name; 

    @Id 
    @GeneratedValue 
    public Long getId() { 
        return id; 
    } 
 
    public void setId(Long id) { 
        this.id = id; 
    } 

    @Column(name="name", length=30) 
    public String getName() { 
        return name; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
}

JPA的关联规则可以根据喜好而任选其一进行配置使用,在对应生成表字段信息时没有区别。从@Access注解的@Target配置信息中可知其可以配置在类,字段或方法上。以此来满足不同场景下表字段信息的扫描规则需求。如:

@Entity 
@Table(name="t_employee") 
@Access(AccessType.FIELD)
public class Employee implements Serializable { 
    private static final long serialVersionUID = 1L; 
   

    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 

    public Long getId() { 
        return id; 
    } 
 
    public void setId(Long id) { 
        this.id = id; 
    } 

    @Access(AccessType.PROPERTY)
    @Column(name="name", length=30) 
    public String getName() { 
        return name; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
}

在默认情况下,JPA会自动识别@Id注解的配置方式,并以此来选择对应的表字段信息的扫描规则。

转载于:https://my.oschina.net/u/1156626/blog/1619239

最后

以上就是朴素洋葱为你收集整理的JPA中@Access注解小结的全部内容,希望文章能够帮你解决JPA中@Access注解小结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部