Hibernate的Annotation注解

2024-09-04 04:38
文章标签 注解 annotation hibernate

本文主要是介绍Hibernate的Annotation注解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 当项目变得比较大的时候,如何还使用hbm.xml文件来配置Hibernate实体就会变得比较复杂。这里Hibernate提供了Annotation注解方式,使得Hibernate的映射文件变得很方便管理了。

        这里简单介绍Hibernate的Annotation注解

        一、声明实体

        @Entity

            对实体注释。任何Hibernate映射对象都要有这个注释

        @Table

           声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字。该注释不是必须的,如果没有则系统使用默认值(实体的短类名)。

         @Version

             该注释可用于在实体Bean中添加乐观锁支持。

 

        二、声明主键

        @Id

           声明此属性为主键。该属性值可以通过应该自身创建,但是Hibernate推荐通过Hibernate生成

        @GeneratedValue

           指定主键的生成策略。有如下四个值

               TABLE:使用表保存id值

               IDENTITY:identitycolumn

               SEQUENCR :sequence

               AUTO:根据数据库的不同使用上面三个

        

        三、声明普通属性

        @Column

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

@Column(nam=”category_name” length=20)
Public void getCategoryName(){Return this.categoryName;
}

        注意:

          1、  当POJO有属性不需要映射的时候一定要用@Transitent修饰,该注释表示此属性与表没有映射关系,只是一个暂时的属性。

          2、  @Lob注释表示该属性持久化为Blob或者Clob类型,具体取决于属性的类型。

 

        四、声明关联关系

        一对多关联关系

        @OneToMany(mappedBy=” person”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)

          一对多声明

        @ManyToOne(cascade=CascadeType.REFRESH,)

        @JoinColumn

          多对一声明 ,声明为双向关联


一对一关联关系

        @OneToOne(optional= true,cascade =CascadeType.ALL, mappedBy = “person”)
        一对一关联声明
        @OneToOne(optional = false, cascade = CascadeType.REFRESH)
        @JoinColumn(name = “Person_ID”, referencedColumnName = “personid”,unique = true)
        声明为双向关联


多对多关联关系

        @ManyToMany(mappedBy= “students”)
        多对多关联声明。
        @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
        @JoinTable(name = “Teacher_Student”,
        joinColumns = {@JoinColumn(name = “Teacher_ID”, referencedColumnName =“teacherid”)},
        inverseJoinColumns = {@JoinColumn(name = “Student_ID”, referencedColumnName =“studentid”)})


        实例:

        有如下两个实体,商品:Goods,分类Category。两者是多对一的关联关系。

        使用Hibernate Annotation注解如下

Goods.java

@Entity
@Table(name = "goods", catalog = "test")
public class Goods implements java.io.Serializable {private static final long serialVersionUID = 1L;private String goodsId;private Category category;private String goodsName;public Goods() {}/** 主键* 生成策略为自动增长* 唯一、长度为20*/@Id@GeneratedValue@Column(name = "goods_id", unique = true, nullable = false, length = 20)public String getGoodsId() {return this.goodsId;}public void setGoodsId(String goodsId) {this.goodsId = goodsId;}/** 多对一关联关系* 延迟加载:fetch = FetchType.LAZY* 引用外键:category_id* */@ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL)@JoinColumn(name = "category_id")public Category getCategory() {return this.category;}public void setCategory(Category category) {this.category = category;}@Column(name = "goods_name", nullable = false, length = 50)public String getGoodsName() {return this.goodsName;}public void setGoodsName(String goodsName) {this.goodsName = goodsName;}}


Category.java
<pre style="white-space: pre-wrap; word-wrap: break-word;">


@Entity
@Table(name = "category", catalog = "test")
public class Category implements java.io.Serializable {private static final long serialVersionUID = -1877960009126534682L;private String categoryId;private String categoryName;private Set<Goods> goodses = new HashSet<Goods>(0);public Category() {}/** 主键* 生成策略为自动增长* 唯一、长度为20*/@Id@GeneratedValue@Column(name = "category_id", unique = true, length = 10)public String getCategoryId() {return this.categoryId;}public void setCategoryId(String categoryId) {this.categoryId = categoryId;}@Column(name = "category_name", length = 20)public String getCategoryName() {return this.categoryName;}public void setCategoryName(String categoryName) {this.categoryName = categoryName;}/** 一对多关联关系* 级联关系:cascade=CascadeType.ALL* 延迟加载:fetch = FetchType.LAZY* 映射:mappedBy = "category"*/@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "category")public Set<Goods> getGoodses() {return this.goodses;}public void setGoodses(Set<Goods> goodses) {this.goodses = goodses;}}

 

                                    

这篇关于Hibernate的Annotation注解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135015

相关文章

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

spring—使用注解配置Bean

从Spring2.5开始,出现了注解装配JavaBean的新方式。注解可以减少代码的开发量,spring提供了丰富的注解功能,现在项目中注解的方式使用的也越来越多了。   ** 开启注解扫描          Spring容器默认是禁用注解配置的。打开注解扫描的方式主要有两种: <context:component-scan>组件扫描和<context:annotation

Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时也提升了代码的可读性和维护性。 一、@RequestMapping @RequestMapping用于将特定的HTTP请求映射到特定的方法上

Hibernate插入数据时,报错:org.springframework.dao.DataIntegrityViolationException: could not insert: [cn.itc

在用junit测试:插入数据时,报一下错误: 错误原因: package junit;import org.junit.Test;import cn.itcast.crm.container.ServiceProvinder;import cn.itcast.crm.dao.ISysUserDao;import cn.itcast.crm.domain.SysRole;

Hibernate中自带的连接池!!!

<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"><?xml version="1.0" encoding="UTF-8"?></span> <span style="font-size:18px;"><!DOCTYPE hibernate-configuration PUBLIC"-//Hibern

Redis缓存 自定义注解+aspect+反射技术实现

最近再给云随笔后台增加redis模块,突然发现spring-boot-starter-data-redis模块很不人性化,实现不了通用的方式,(当然,你也可以自己写个通用的CacheUtil来实现通用的方式),但由于本人非常的爱装逼,就在这里不讲解那种傻瓜式操作了,这里只讲干货,干到你不可置信的干货). 例如:这里我使用了它其中的RedisTemplate ,发现存到redis中后,数据