【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. 领扣(LeetCode)数字转换为十六进制数 个人题解

    给定一个整数,编写一个算法将这个数转换为十六进制数.对于负整数,我们通常使用 补码运算 方法. 注意: 十六进制中所有字母(a-f)都必须是小写. 十六进制字符串中不能包含多余的前导零.如果要转化的数 ...

  2. 记录工作遇到的死锁问题(Lock wait timeout exceeded; try restarting transaction)

    1.问题背景 刚来新公司不久,对业务还不太熟悉,所以领导先安排我维护原有系统.大概介绍下项目背景,项目分为核心业务部分在项目A中,与第三方交互的业务在项目B中,前端发起请求调用A项目接口,并在A项目中 ...

  3. 你必须知道的容器日志 (2) 开源日志管理方案 ELK

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇<你必须知道的容器日志(1)>中介绍了Docker自带的log ...

  4. HTML的footer置于页面最底部

    vue项目中,使用element-ui的布局,仍然出现footer不固定页面底部的情况,网上找到的一个管用的 方法是:footer高度固定+绝对定位 <html> <head> ...

  5. goland学习-go常用命令使用

    goland学习-go常用命令使用 1.跨平台编译:env GOOS=linux GOARCH=amd64 go build 2.获取go第三方包:go get -u github.com/go-sq ...

  6. 万恶之源-python内容的进化

    1.整数: ​ int--计算和比较 ​ 整数可以进行的操作: ​ bit_length().计算整数在内存中占用的二进制码的长度 2.布尔值 ​ bool 布尔值--用于条件使用 ​ True 真 ...

  7. 执行yaml.load()出现警告信息:YAMLLoadWarning: callingyaml.load() without Loader=..

    执行yaml.load()出现警告信息:YAMLLoadWarning: callingyaml.load() without Loader=... 原因: yaml5.1版本后弃用了yaml.loa ...

  8. C#Windows Forms 计算器--xdd

    一.计算器 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...

  9. C#学习笔记02--Bool,关系/逻辑运算符, if/switch语句

    一. Bool类型   逻辑判断, C#中只有true和false两个值; 使用场景: 在分支和循环语句中, 常用作为判断条件来使用;   二. 关系运算符   关系运算符 (> < &g ...

  10. 算法整理(php语言完成),持续更行中......

    一下所有实例中,均在同一个方法中,所以算法使用内部函数完成 归并排序 public function test1Action () { $tmp = 0; $al_merge = function($ ...