Hibernate注解(二)属性级别注解
一、添加方式
(1)写在属性字段上面
(2)写在属性的get访问器的上面
二、属性级别的注解
![](https://img.haomeiwen.com/i2058461/51836a1e34b9c379.png)
三、@Id
@Id:必须,定义了映射到数据库表的主键的属性,一个实体类可以有一个或者多个属性被映射为主键,可置于主键属性或者getXxxx()前
注意:如果有多个属性定义为主键属性,该实体类必须实现serializable接口
![](https://img.haomeiwen.com/i2058461/b69e12a32762e192.png)
![](https://img.haomeiwen.com/i2058461/0dfa3296c7a55a37.png)
此时没有生成数据表,因为MySQL规定String类型的字段为主键,不能过长,必须指定长度小一些
可以添加多个属性作为联合主键,但是String类型的属性长度默认是255,太长了不能作为主键,可通过@column的length来设置长度小一些
![](https://img.haomeiwen.com/i2058461/62ea0a65bed27102.png)
![](https://img.haomeiwen.com/i2058461/be604289667111ea.png)
四、@GeneratedValue
![](https://img.haomeiwen.com/i2058461/cb87a7ea7d72a5ed.png)
![](https://img.haomeiwen.com/i2058461/e822dda2a43c4cd8.png)
![](https://img.haomeiwen.com/i2058461/2e6f72a437baa4ae.png)
![](https://img.haomeiwen.com/i2058461/51c0b2f8965dc2a9.png)
如果把字段的类型改为String类型,生成策略一样是自动的,跟上一章所说的一样,String类型作为主键,生成的字符长度默认为255,超过了mysql规定的字符串主键的长度,所以此操作未生成数据表
![](https://img.haomeiwen.com/i2058461/163a939aeaf30c53.png)
指定长度后,还是不能生成数据表
![](https://img.haomeiwen.com/i2058461/02870c90111a2b74.png)
对于 MySQL 来讲,@GeneratedValue ==@GeneratedValue(strategy=GenerationType.AUTO)。
主键是字符串,主键生成策略就为手工赋值,不能用JPA提供的主键生成策略,要用Hibernate提供的主键生成器,其中GenericGenerator(name)与generator中的值对应,assigned就是手工赋值。否则使用AUTO的话即使长度也规定了,运行也通过了,但是还是生成不了表。
![](https://img.haomeiwen.com/i2058461/a4196b8444870530.png)
![](https://img.haomeiwen.com/i2058461/b37382fc104d1409.png)
五、添加一条记录
![](https://img.haomeiwen.com/i2058461/58a5fc7f3088fd74.png)
![](https://img.haomeiwen.com/i2058461/9d6c3584e6855f48.png)
六、@Column
![](https://img.haomeiwen.com/i2058461/201c9fa816fd7e6c.png)
七、@Embedded
@Embedded是注释属性的,表示该属性的类是嵌入类
注意:同时嵌入类最好也标注@Embeddable注解
@Embedded和@Embeddable只需要用一个(同时用也一样),而且效果一样
![](https://img.haomeiwen.com/i2058461/227cfc3259cffeb7.png)
八、@EmbeddedId
@EmbeddedId使用嵌入式主键类实现复合主键。
注意:嵌入式主键类必须实现Serializable接口,必须有默认的public无参构造方法,必须覆盖equals和hashCode方法。
![](https://img.haomeiwen.com/i2058461/18b36da3bf92307e.png)
![](https://img.haomeiwen.com/i2058461/3a3c0915445290ff.png)
![](https://img.haomeiwen.com/i2058461/09d9514c0afeff2a.png)
![](https://img.haomeiwen.com/i2058461/56723926a57b0f40.png)
新增一条记录
![](https://img.haomeiwen.com/i2058461/ce32dbb99e0dd085.png)
![](https://img.haomeiwen.com/i2058461/bcc5484899402fc4.png)
九、@Transient
属性级别注解@Transient:可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic。
![](https://img.haomeiwen.com/i2058461/b26c7077b4576068.png)
![](https://img.haomeiwen.com/i2058461/4bfaab40944fac79.png)
没有salary这个字段生成