zoukankan      html  css  js  c++  java
  • 关于hibernate中@Transient注解使用的一点心得

     (例): @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性. 
    如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic
        示例:
        //根据birth计算出age属性

    @Table(name="person")
    public class Person{
        
        private Date birth;
     
        @Column(name = "birth")
        public Date getBirth() {
            return birth;
        }
     
        public void setBirth(Date birth) {
            this.birth = birth;
        }
         
        @Transient
        public int getAge(){
            return getYear(new Date())-getYear(getBirth());    //getYear为类中的自定义方法,返回传入日期的年份
        }
    }

    上面的这个转载对@Transient的作用说的不是很清晰。

             说一点个人的心得,比如上面例子在一个持久化类person中定义了birth的属性并且用了@Column注解在数据表中进行了映射,而getAge()方法注解为@Transient,表明在数据库表中并没有age这个映射字段。

             当你通过字段映射从数据库获取数据时,因为getAge()加了@Transient,并且在数据库中没有字段。所以getAge()没有从数据库中获取数据,而是通过getBirth()方法获取数据库中返回的birth,并通过计算返回getAge()的值。 

    return getYear(new Date())-getYear(getBirth());

    当你在程序中获取到持久化类person的对象时,person.getAge()和person.getBirth()都有数据返回提供给你使用。

             这样做的话,能减少数据库的字段,比如这个例子中就不需要新建一个关于age的数据库字段了,通过birth字段和计算就能获取到person的age属性。@Transient还可以在持久化类中直接获取关联表中的字段值,许多业务逻辑中都有很大的作用。

    个人理解,如有不足之处,望指正。
    ————————————————
    版权声明:本文为CSDN博主「水手峡谷」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u010786902/article/details/50902921

  • 相关阅读:
    高精度模板
    LG1017 进制转换:负数进制
    asp.net MVC URL Routing问题 关于routes.MapRoute()方法
    在MVC中如何获取Request.QueryString中的参数值的方法
    查询视图扩展方法
    ef4.1 codeFirst--存储过程
    JSON.stringify(value [, replacer] [, space])
    搭建MVC及WebAPI项目框架时碰到的问题集合
    asp.net mvc 中调用 web api
    LINQ TO SQL学习笔记(1)_级联操作
  • 原文地址:https://www.cnblogs.com/lxl57610/p/14685546.html
Copyright © 2011-2022 走看看