hibernate Annotation用法

来源:互联网 发布:c语言经典编程案例 编辑:程序博客网 时间:2024/04/29 15:15
 

hibernate中Annotation的用法:

如果在一个类里面没有写关于它的annotation的话那么就相当于是写了
@Basic这个注解它的意思是最基本的注解

如果想在一个实体中有一个属性,但是这个属性不想被村人数据库,这个时候
应该怎么做呢?
使用注解的时候这样:@Transient
使用xml的时候直接在配置的时候不对它进行配置就行了.

在注解中如果一个注解的选项包括value那么这个value可以不写,比如
@table(name="teacher")这个注解中table的名字name一定要写上去
但是如果使用这个注解
@Temporal()它的里面有个value的选项这个时候可以这样写
@Temporal(value="teacher")也可以写成@Temporal("teacher")
所以如果别人的代码中出现了没有名字的值的话,说明它是value的属性.

 @Temporal(TemporalType.DATE)   只是记录日期
 @Temporal(TemporalType.TIME)   只是记录时间
 @Temporal(TemporalType.TIMESTAMP) 日期和时间全部记录
 
 在hibernate中80%的情况下都是不需要指定类型的.
 
 xml配置枚举类型时候非常的麻烦,而相对于annotation来说就会比较的简单
 这是因为枚举类型在jdk5之后就出现了,但是xml在jdk5之前就已经出现了,
 因此xml对于枚举类型的支持就显得很吃力了.
 
 @可以放到成员变量上也可以放在方法上
 这两中风格都有不少的人在使用,但是建议使用的是把注解放在get的方法上面
 原因:
 本身面向对象的编程的思想就是防止别人直接的访问自己的成员变量,况且model
 的属性又是私有的,因此如果把注解放在了属性上面,那么hibernate就可以通过
 自己的方法拿到这个model的私有的变量,这个本身就违背了面向对象编程的思想
 但是呢实际的工作中很多的人都是把它放在了filed上面的,这个是因为如果把注
 解放在这些变量的上面的话,会让代码看起来非常的集中.
 
 Source Folder的意思是这也是一源码路径,在编译的时候呢也会把它编译为二进制的源码.
 
 有一个问题就是如果你这样指定属性在数据库表中所对应的字段的话:
 @Column(name="_age")
 public int getAge() {
  return age;
 }
 也就是把注解写在get方法上面,这个时候hibernate插入数据库的时候插入的是age属性而不是_age
 
annotation生成主键:
generatedValue如果这么写的话,就相当于是auto就是native的意思

@embed:嵌入的
@embeddable可以被嵌入的,就是嵌入的语句.


如果主键的生成策略为Squence的话,就需要这样配置:

@Entity
@SequenceGenerator(name="squ_user",sequenceName="squ_user_sql")
public class Husband {
 @Id
 @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="squ_user")
 private Integer id;
 }

配置的时候是先在类的前面把序列给设置好,然后再使用的时候指定类型,以及在上面
所配置好的序列的名称就可以了.
------------------------------------------------------------------------------------
使用table作为生成主键的策略

@Entity
@TableGenerator(
  name="Husband_Gen",指明的是这个生成主键策略的表明在hibernate中的名字
  table="husband_gen",指明的是这个生成主键策略的表明在数据库中的名字
  pkColumnName="key",指明的是主键所在的列的名称
  valueColumnName="value",指明的这张表为对应主键所提供的值所在列的名字
  pkColumnValue="husband",具体的一个主键的名字
  allocationSize =1两条记录之间的步长
)
public class TableGeneratedValue {
 @Id
 @GeneratedValue(strategy=GenerationType.TABLE,generator="Husband_Gen")
 private Integer id;
 }
 
 注意事项:在使用table生成主键的时候要注意,如果是使用的mySql的话,就需要把主键字段的
 AutoIncrement给取消掉,否则是不会起作用的.

 
------------------------------------------------------------------------------------

原创粉丝点击