Hibernate中的一些注解的学习

1、@Column注解

  就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类属性数据表字段对应关系

@Column注解一共有10个属性,这10个属性均为可选属性,各属性含义分别如下:

name 
name属性定义了被标注字段在数据库表中所对应字段的名称;

unique 
unique属性表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。

nullable 
nullable属性表示该字段是否可以为null值,默认为true。

insertable 
insertable属性表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。

updatable 
updatable属性表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。

columnDefinition 
columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)

table 
table属性定义了包含当前字段的表名。

length 
length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。

precision和scale 
precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。

此标记可以标注在getter方法或属性前,例如以下的两种标注方法都是正确的

2、@JoinColumn

  与@Column相区别的是:@JoinColumn注释的是保存表与表之间关系的字段,它要标注在实体属性上。而@Column标注的是表中不包含表关系的字段。

与@Column标记一样,name属性是用来标识表中所对应的字段的名称。例如customer表中存在字段addr_id,标识的代码如下所示。

  @OneToOne

  @JoinColumn(name = "addr_id")

  public AddressEO getAddress() {

return address; 
  
  }

若此时,不设置name的值,则在默认情况下,name的取值遵循以下规则:

name=关联表的名称+“_”+ 关联表主键的字段名

例如,CustomerEO实体中,如果不指定name的值,默认将对应name=address_id;因为@JoinColumn注释在实体 AddressEO属性上,实体AddressEO对应的表名为“address”;表address的主键是“id”,所以此时对应的默认的字段名称为 “address_id”。 
3、@ManyToOne

  从具体用户Users查到其对应的Group,反过来也能通过Group查到具体Users,所以是双向关联,所以Group对于Users是“一对多”的关联关系@OneToMany,Users对于Group是“多对一”@ManyToOne。

@Entity
@Table(name="t_Group")//指定一个表名
public class Group
{
    private int id;
    private String name;
    private Set<Users> users = new HashSet<Users>();  

    @Id
    @GeneratedValue//主键用自增序列
    public int getId() {
        return id;
    }
    @OneToMany(mappedBy="group",cascade=(CascadeType.ALL))//以“多”一方为主导管理,级联用ALL
    public Set<Users> getUsers() {
        return users;
    }

  

@Entity
@Table(name="t_Users")
public class Users
{
    private int id;
    private String name;
    private Group group;  

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    @ManyToOne(fetch=FetchType.LAZY,cascade=(CascadeType.ALL))//解决1+N,级联用ALL
    @JoinColumn(name="groupId")//指定外键名称,不指定的默认值是group_Id
    public Group getGroup() {
        return group;
    }

  

时间: 2024-08-17 10:08:29

Hibernate中的一些注解的学习的相关文章

Hibernate中使用@Lob 注解保存String[] 问题

Hibernate中使用@Lob 注解保存String[] 问题 在Hibernate注解中如何你想保存一个字段为String数组类型,如果你想尝试保存为clob类型的话,一般情况下为定义为: @Entity Public class Person { - @Lob String[] stringArray; -. } 多数时候当你自动创建表的时候,Hibernate会告诉你Json无法转换或者类转换错误,原因在于你保存text类型文本,Hibernate只接受String类型的,当你定义为St

Hibernate中的Annotation注解与XML配置的使用

通过XML配置来实现持久化: 首先我们来建立一个实体类: package com.hibernate.model; public class Student {     private int id;     private String name;     private int age;          public int getId() {         return id;     }     public void setId(int id) {         this.id 

hibernate中实体类注解

一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法, JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出. Target({METHOD,FIELD}) @Retention(RUNTIME) public @interface GeneratedValue{ G

hibernate 中如何用注解映射定长字符类型char(2)

如果是用xml的方式配置映射,可以在<column>标签的sql-type属性中设置char(2),比如: 1 <property name="age" type="java.lang.String"> 2 <column name="age" sql-type="char(2)"></column> 3 </property>   如果是注解的话,需要使用@Colu

Annotation(二)——Hibernate中注解的开发

在利用注解开发数据库持久层以前,需要学习一个规范JPA(Java Persistence API),这也是SUN公司提出的数据库的持久化规范.就类似于JDBC,Servlet,JSP等规范一样.而Hibernate框架就实现了此规范,我们可以通过注解和配置文件来实现此规范.前边的学习都是建立在配置文件的基础上,而注解开发现在也处于一种趋势,毕竟它大大提高了开发速度. 看一下注解在Hibernate框架中的开发知识. 一,首先需要导入支持注解开发的jar包: hibernate-annotatio

Hibernate中注解的开发

在利用注解开发数据库持久层曾经,须要学习一个规范JPA(Java Persistence API),这也是SUN公司提出的数据库的持久化规范. 就类似于JDBC.Servlet,JSP等规范一样.而Hibernate框架就实现了此规范,我们能够通过注解和配置文件来实现此规范.前边的学习都是建立在配置文件的基础上,而注解开发如今也处于一种趋势.毕竟它大大提高了开发速度. 看一下注解在Hibernate框架中的开发知识. 一.首先须要导入支持注解开发的jar包: hibernate-annotati

Hibernate中的注解说明

Hibernate中注解注解比较多,常用的也就那么几个,在这里把Hibernate中的注解汇总总结一下. @Entity:将一个类声明为一个实体bean,即一个持久化POJO; @Id:声明bean的标识属性,即和表中的主键对应的属性: @Table:声明bean映射数据库中指定的表: @Column:声明bean的属性到表的列的映射,该注解还有以下属性: name:可选,属性要映射的列明,如果属性名和列名相同则可以省略: unique:可选,是否在该列上设置唯一约束,默认值为false: nu

[原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

hibernate中1对1的注解配置

hibernate中1对1的注解配置分为:外键关联映射和主键关联映射 1.外键配置 //一方@Entity@Table(name="test_classinfo")public class ClassInfo { @Id @SequenceGenerator(name="seqClassInfo",sequenceName="seq_test_classinfo") @GeneratedValue(generator="seqClass