java hibernate注解详解_Hibernate JPA 2+ 注解的详解(一)

Hibernate JPA 2+ 注解的详解(一)

jpa中定义建表,Hibernate提供了Annotation注解方式,数量比较多,往往一般不清楚这些注解是做什么用的。这里提供一些常用简单的Annotation注解的使用方法。

数据表注解

@Entity

用于实体的注释,任何Hibernate映射对象都要有这个注释

@Table

name String 定义表名

indexes Index[] 定义数据库索引的数组,数组中的每一个元素定义,请参数@Index

@Index

这个注解是用来定义索引,其中:

name String 表示数据库中索引的名称

columnList String 表示对应的java属性名称

unique Boolen 表示索引是否为唯一索引

举个例子:

@Table(name = "jk_admin_user_role",

indexes = {

@Index(name="CREATOR_INDEX", columnList="creator_id"),

@Index(name="USER_ROLE_INDEX",columnList="user_id, role_id",unique=true)

})

上面的代码,@Index 中的name,代表自定义的索引名,columnList是指要索引的列名,这里的列名,应该是生成后的列名,而不是在类定义中的属性名。网上的好多教程都写类属性名,但是我在写类属性名的时候会报错找不到属性。

Caused by: org.hibernate.AnnotationException: Unable to create index (creator) on table jk_admin_user_role: database column 'creator' not found. Make sure that you use the correct column name which depends on the naming strategy in use (it may not be the same as the property name in the entity, especially for relational types)

如果有另外的方法请指出错误。

类属性名与数据库中的列名对应在后面。unique为布尔型,代表是否使用唯一索引。

如果在columnList中加入两个或以上的列名,代表建立联合唯一索引。

@Version

用于在实体bean中添加乐观锁的支持。

主键声明

@Id

这个注解用于主键的声明,该属性值可以通过在数据库中指定Primary key,推荐在Hibernate生成。

GeneratedValue

strategy GenerationType,这个属性用于指定主键的生成策略,是一个enum类,有以下几个属性:

TABLE: 使用表保存的ID值。

IDENTITY:主键由数据库自动生成(主要是自动增长型)。

SEQUENCR: 根据底层数据库的序列来生成主键,条件是数据库支持序列。

AUTO: 根据程序自动生成。

属性声明

@Column

声明该属性与数据库字段的映射关系

@Column(name="create_time", length=20, columnDefinition ="TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'")

name 表示在表中生成的列名,有默认值,按一定的规则生成列名。分为几种情况:

属性名全小写或大写,生成的列名跟属性名一致。

属性名使用驼峰,中间的大写字母会转为下划线+小写,比如:"createTime",在数据库中生成的列名会变为“create_time”

属性是有一对一,一对多等映射关系的,名字会变为两列的属性名按上述两个规则转换后用下划线连接。

/**

表1

*/

@Entity

@Table(name = "admin_user")

public class AdminUserModel implements BaseModel {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer Id;

@ManyToOne

private AdminRoleModel role;

...

}

/**

表2

*/

@Entity

@Table(name = "admin_role")

public class AdminroleModel implements BaseModel {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer Id;

@OneToMany

private List adminUserModels;

...

}

上面的代码中,表1的role列,在生成的时候会变成与admin_role主键进行拼接,也就是在"admin_user"表中,role属性生成的列名为:"role_id"

length Intger 表示长度

columnDefinition String 列名定义,与SQL语句中的定义并无不同,详情请见MYSQL的相关文章。

@JsonIgnore

声明该字段在JSON中忽略,如果不需要显示的话可以增加此注解。

@JsonIgnore

@OneToMany(mappedBy = "user")

private List adminUserRoleModelsUser = new ArrayList<>();

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值