首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张表

https://blog.csdn.net/huyuyang6688/article/details/50680899   我们都知道,Hibernate最大的一个优点就是使开发更加“面向对象...”,类与类之间有继承关系,Hibernate中也对这种继承关系提供了映射的封装。   ...  配置映射文件时,父类还用标签来定义即可;添加的区分字段(比如上面表1中的Type字段)需要用标签来定义;用标签定义两个子类,与父类“合并...(Animal.class, 1); System.out.println(pig.getName()); session.getTransaction().commit();   执行结果都为: 小猪猪...().commit(); 总结   这种映射方式可以把多个类放在一张表中,但是粒度比较粗,有冗余字段;但又是因为多个类的相关记录都存放在一张表中,查询时不用关联,因此效率较高。

39120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    day31_Hibernate学习笔记_03

    的值为 subselect 时,注意:该属性的值,在一次加载多个客户的订单数据的情况下才有效     // 结果:会在使用集合(订单)时才加载,子查询语句,如果你使用集合只是为了获取集合的长度,则Hibernate...法二:因为是在Service层调用的Dao层的方法,那么我们在Service层就知道以后我们在页面上要用的数据,所以我们在Seesion关闭之前,在Service层先getXxx()在页面要上要用到的属性...与SQL语法基本一致,不同的是HQL是面向对象的查询,查询的是对象和对象中的属性。 HQL的关键字不区分大小写,但是类名和属性名区分大小写。...乐观锁(需要自己实现,但Hibernate帮我们实现了,我们只需配置一下就可以使用了): 乐观锁:丢失更新肯定不会发生。 在表中提供一个字段(版本字段),用于标识记录。如果版本不一致,不允许操作。...().commit();         session.close();     } } 乐观锁示例代码: 在PO对象(JavaBean)中提供字段,表示版本字段。

    2.5K40

    day30_Hibernate学习笔记_02

    值,将ID值加1作为新的主键,不建议使用,存在线程并发问题         // assigned  => 需要手动指定主键,不手动指定将会报错         session.getTransaction...//       持久化状态的特点:Hibernate会自动将持久化状态对象的变化同步到数据库中。     ...session.update(u);      // 多余代码  => 因为Hibernate会自动将持久化状态对象的变化同步(更新)到数据库中。         ...Session一级缓存中,但是为什么每次调用Hql查询都会生成Sql语句呢?...多对多:提供中间表(从表),提供2个字段(外键)分别对应两个主表。 一对一:非常少见。 如何使用面向对象的思想通过代码描述对象与对象之间关系?

    1.1K20

    Hibernate学习笔记 单表映射

    建立实体类 配置好SessionFactory之后,我们就可以开始建立一对一的单表映射了。首先需要建立一个实体类,这里Getter、Setter、toString、equals等方法省略了。...默认情况下表名和实体类名相同,如果希望自定义表名使用Table注解并设置相应的name属性。 Id注解标明了主键。...NaturalId指定实体类的自然主键。一般情况下推荐使用无意义的数字作为主键,但是有时候类似于用户名、书籍编号这样的属性也具有主键的意义。这时候我们将这些属性定义为自然主键。...注解即可以放在字段上,也可以放在方法上。如果放在字段上,Hibernate就会使用字段对数据进行操作。如果放在方法上,Hibernate就使用方法操作数据。...不论哪种都是可以的,但是需要注意保持一致性,不能混用。Hibernate检索的依据是Id注解的位置,如果Id放在了方法上而其他注解放在了字段上,Hibernate就会忽略字段上的所有注解,反之亦然。

    36120

    hibernate框架中对象的状态

    ().commit(); session.close(); 控制台打印: ----------------- Hibernate: insert into t_user (...-----"); session.getTransaction().commit(); System.out.println("-------------------"); 控制台打印: -...().commit(); System.out.println("-------------------"); 控制台打印: Hibernate: select user0_....情况1)调用save方法把临时状态变为持久状态 情况2)调用save方法把游离托管状态状态变为持久对象 保存一个对象之后,提交事务/关闭Session,此时对象处于游离状态, 再创建新的Session...session中的方法仅仅是改变对象的状态,不发SQL: 3: 持久化对象的属性真正发生改变时,才会发生UPDAE语句. ---- 发生SQL的时机: 默认情况下,在事务提交时,会自动去数据库同步这一次对象变化对应的

    85220

    注解方式实现级联

    一般情况下,我们只会用到前两种情况,多对多用的较少。我这里使用省市区三级联查来实现级联的操作。简单来说,一对多就是一个省下面有多个市,一个市下面有多个县。多对一是刚好反过来的。...首先是使用配置文件的情况下,关联类,生成的hbm.xml文件中显示如下: hibernate-mapping> <class name="com.qy.domain.Province" table...-- name:当前类的属性名 column:从表中的外键名 foreign-key:主表中的被参照字段 property-ref:主表中被参照字段的属性名...注意: (1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。...(2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。 (3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。

    63520

    Hibernate【映射】续篇

    -- 映射普通字段 父类的属性直接引用就行了,比如name属性,直接写就行了!...(); session.save(cat); //如果取数据时候Animal父类接收的话,需要给出Anmail的全名 //提交事务 transaction.commit();...鉴别器字段:作用是在数据库中区别每一个子类的信息, 就是一个列 discriminator-value="cat_" 指定鉴别器字段,即type_字段的值 如果不指定,默认为当前子类的全名 --...-- Animal下的子类映射成一张表 指定子类的类型,对应的表 指定子类的外键字段【需要对应Animal】 指定子类的普通属性 --> <joined-subclass name="Cat...-- 将子类的信息都映射成一张表 给出属性的名称 属性对应的数据库表 普通字段 --> <property

    77160

    菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    就打算让用户自己配置要加入的字段,然后生成相应的表。 须要动态配置的部分实例: 上图仅仅是一小部分,一个一个组合起来大概有三百多。每一项相应一个实体,显然不好,就算是依照规律归归类还是有不少。...后来决定用Hibernate的动态模型来处理这个问题,可能有的人不是非常了解Hibernate的动态模型,以下我们就来介绍一下。 我们通经常使用实体类来跟表进行映射。...String password; // setter、getter... } 然后用配置文件或注解来描写叙述映射关系,假设使用动态模型的话,则不须要编写实体类,仅仅须要写一个配置文件就可以...().commit(); session.close(); 发出的SQL语句:insert into User (name, password) values (?...就是为了兼容执行期生成的动态模型配置文件,而JRebel能够检測到配置文件的变化,从而将新增的配置载入进来。

    56010

    hibernate笔记(二)

    -- set集合属性的映射 name 指定要映射的set集合的属性 table 集合属性要映射到的表 key 指定集合表(t_address)的外键字段 element 指定集合表的其他字段 type...().commit(); session.close(); } 问题: 集合映射,映射的集合元素,都是普通的类型, 能否为对象类型?...session.save(emp_zs); session.save(emp_ls);// 再保存多的一方,关系回自动维护(映射配置完) session.getTransaction().commit...cascade 属性 cascade 表示级联操作 【可以设置到一的一方或多的一方】 none 不级联操作, 默认值 save-update 级联保存或更新 delete...映射的集合属性: “developers” 2. 集合属性,对应的中间表: “t_relation” 3. 外键字段: prjId 4. 外键字段,对应的中间表字段: did 5.

    54710

    走进JavaWeb技术世界13:Hibernate入门经典与注解式开发

    一般它和JavaBean对象放在同一目录下 我们是不知道该XML是怎么写的,可以搜索一下Hibernate文件夹中后缀为.hbm.xml。看看它们是怎么写的。然后复制一份过来 的信息 configure方法 configure()方法用于加载配置文件 加载主配置文件的方法 如果指定参数,那么加载参数的路径配置文件 如果不指定参数,默认加载src/目录下的...我们来使用一下update()方法吧....既然是更新操作了,那么肯定需要设置主键的,不设置主键,数据库怎么知道你要更新什么。...SQL:Struct query language 结构化查询语言 查询的是表以及列【不区分大小写】 HQL是面向对象的查询语言,可以用来查询全部的数据!...@Column(name="c_name", length=30, nullable=true) private String name; 注意:对于PO类中所有属性,如果你不写注解,默认情况下也会在表中生成对应的列

    1.8K10

    走进JavaWeb技术世界13:Hibernate入门经典与注解式开发

    一般它和JavaBean对象放在同一目录下 我们是不知道该XML是怎么写的,可以搜索一下Hibernate文件夹中后缀为.hbm.xml。看看它们是怎么写的。然后复制一份过来 的信息 configure方法 configure()方法用于加载配置文件 加载主配置文件的方法 如果指定参数,那么加载参数的路径配置文件 如果不指定参数,默认加载src/目录下的...我们来使用一下update()方法吧....既然是更新操作了,那么肯定需要设置主键的,不设置主键,数据库怎么知道你要更新什么。...SQL:Struct query language 结构化查询语言 查询的是表以及列【不区分大小写】 HQL是面向对象的查询语言,可以用来查询全部的数据!...@Column(name="c_name", length=30, nullable=true) private String name; 注意:对于PO类中所有属性,如果你不写注解,默认情况下也会在表中生成对应的列

    1.8K00
    领券