【JPA】字段访问、属性访问及混合访问

转载:https://www.cnblogs.com/yangchongxing/p/10120318.html

1、字段访问

注解字段,通过反射来获得和设置字段实体,若getter和setter方法存在,那么会忽略他们。也就是说以后的getter和setter方法不会被使用。有一下两种写法,根据个人喜好定。

写法一

@Id private int id;

写法二

@Id
private int id;

2、属性访问

注解方法,getter和setter方法将由程序调用,用于访问和设置状态。有一下两种写法,根据个人喜好定。

写法一

@Id public int getId() {
return id;
}

写法二

@Id
public int getId() {
return id;
}

3、混合访问

同时注解字段和方法,使用@Access注解 覆盖默认的访问模式 或者 数据在读取和写入到数据库的过程中执行一个简单的数据转换。

看一个例子,比如电话phone在写入数据库时要追加区号010-,而表示时却不显示。
首先通过@Access(AccessType.FIELD)显式标记类的访问为字段访问。如果字段和属性都被注解,那么它将是未定义的。
然后通过@Access(AccessType.PROPERTY) @Column(name="phone")注解属性,有意识的区别于默认情况,对数据进行转换格式。
最后通过@Transient把要使用持久化的字段标记为临时的,防止默认的访问规则导致状态被持久化两次。
代码如下:

package cn.ycx.entity;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient; @Entity
@Access(AccessType.FIELD) //显式标记类的默认访问模式为字段访问
public class Employee {
@Id
private int id;
private String name;
@Transient //标记字段为临时的防止被持久化两次
private String phone;
private long salary; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return "010-" + phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Access(AccessType.PROPERTY)//有意识的区别于默认情况,对数据进行转换格式
@Column(name
="phone")
public String getPhoneForDb() {//存入数据库时追加010-
return "010-" + this.phone;
}
public void setPhoneForDb(String phone) {//从数据库读出时去掉010-
this.phone = phone.substring(4);
}
public long getSalary() {
return salary;
}
public void setSalary(long salary) {
this.salary = salary;
}
}

【JPA】字段访问、属性访问及混合访问的更多相关文章

  1. C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)

    4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...

  2. C++学习之路—继承与派生(一):基本概念与基类成员的访问属性

    (本文根据<c++程序设计>(谭浩强)总结而成,整理者:华科小涛@http://www.cnblogs.com/hust-ghtao,转载请注明) 1   基本思想与概念 在传统的程序设计 ...

  3. 改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员(整理中)

    改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员 序 为什么我们的程序运行得棒棒的,还要改呢?Why? 答:我们要让程序运行得更快,执行的效率更高,代码的可读性更强,维护的成本更低.. ...

  4. JAVA基础_字符串、访问属性

    1.字符串   String s = new String(“123”)不如String s = “123”效率高.   字符串连接操作StringBuilder效率比较高.   StringBuff ...

  5. 浅析对象访问属性的"."和"[]"方法区别

    在JavaScript中通常使用”."运算符来存取对象的属性的值.或者使用[]作为一个关联数组来存取对象的属性.但是这两种方式有什么区别了? 例如,读取object中的property属性值 ...

  6. 在client类中设置访问属性 address,business和individua

    php 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的, 是为了有的场合想用多继承,但PHP又没多继承 ,于是就发明了这样的一个东西. Traits可以理解为一组能 ...

  7. Apache配置站点根目录、用户目录及页面访问属性

    一.配置站点根目录及页面访问属性 DocumentRoot "/www/htdoc" <Directory "/www/htdoc"> Option ...

  8. C++,关于类和结构体中,成员访问属性(public,private)

    今天发现一个的问题: #include <vector> #include <iostream> #include <algorithm> #include < ...

  9. 《Effective C#》读书笔记-1.C# 语言习惯-1.使用属性而不是可访问的数据成员

    思维导图: 大纲: 1.使用属性而不是可访问的数据成员    属性        指定不同的访问权限        隐式属性降低了声明属性的工作量        允许将数据成员作为公共接口的一部分暴露 ...

随机推荐

  1. 【Java】抽象类和接口详解

    抽象类 一.抽象类的概述 现在请思考一个问题:假如我现在又Dog.Cat.Pig等实例对象,现在我们把它们都抽象成一个Animal类,这个类应该包含了这些Dog.Cat.Pig等实例对象eat的功能, ...

  2. SIGCHLD waitpid, 小心子进程结束事件被偷了

    原本项目中依赖子进程执行的地方,都使用jni调用java层的ProcessManager,换了c++ACE框架后,发现这些任务都很慢,调试才发现所有子进程执行的任务都必须等待到reactor超时才返回 ...

  3. 0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。

    arm调试过程,如果抛一个SIGSEGV,地址在 0xe7f001f0 附近,原因居然是因为我在调试.当我使用n指令跳到下一行代码时,往往变成了continue指令一样地执行.还不确定地抛出SIGSE ...

  4. ubuntukylin16.04LTS(乌班图麒麟版长期支持版,并非银河麒麟)安装体验

    最近,国产银河麒麟版在政府部门推广使用.我有幸接触了,感觉还是不错的.这次政府软件正版化整改中,也列入了windows和银河麒麟的选项.我想试安装一下,可是没找到.就近找了它的类似系统ubuntuky ...

  5. firefox浏览器中使用vux的x-input报错TypeError: _this3.$refs.input.scrollIntoViewIfNeeded is not a function

    最近做公众号项目,想着统一风格,所以决定使用vux. 在调试时发现,只要鼠标点击x-input输入框,就会报错 TypeError: _this3.$refs.input.scrollIntoView ...

  6. Java中的工具类究竟如何命名?

    先来几个例子 JDK自带工具类 Arrays.asList(); Objects.equals(); Collections.sort(); Spring框架工具类 StringUtils.isEmp ...

  7. 部署k8s集群监控Heapster

    git clone https://github.com/kubernetes/heapster.gitkubectl apply -f heapster/deploy/kube-config/inf ...

  8. .NET Core 3.0之深入源码理解HealthCheck(一)

    写在前面 我们的系统可能因为正在部署.服务异常终止或者其他问题导致系统处于非健康状态,这个时候我们需要知道系统的健康状况,而健康检查可以帮助我们快速确定系统是否处于正常状态.一般情况下,我们会提供公开 ...

  9. scikit-learn文本特征提取之TF-IDF

    TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术. TF-IDF是一种统计方法,用以评估一字词对于一个文件集 ...

  10. 大白话OSI七层协议

    目录 一.物理层 二.数据链路层 2.1 以太网协议 2.2 Mac地址 2.3 广播地址 三.网络层 3.1 IP协议详解 3.1.1 IP地址的两部分 3.2 子网掩码详解 3.3 IP数据包详解 ...