关于hibernate查询视图时,相同主键的两条记录映射问题【已解决】

做项目中间遇到一个很诡异的问题:

有两个表:A和AHistory(A表记录删除后存入此表,A的历史表),当我复制一条记录到AHistory表时,此时A表和AHistory表两条记录id相同,后续通过修改操作将两表任意一条记录更新为不同的信息,但ID仍然相同;此时,如果用hibernate映射到实体类中时,想象中的应该是两个不同的实体类,拥有不同的属性等。

然而,当我在程序中查询这两条ID相同的记录后,所得到两个的hibernate映射实体类却完全相同。

通过此问题,才知道hibernate会将查询的两条ID相同的记录当做一个对象处理,因此导致获取到两个完全相同的实体类,由此猜想,hibernate应该是通过主键去存储和获取映射对象的……

以上观点若有不妥之处,敬请不吝赐教……

时间: 2024-08-03 15:25:10

关于hibernate查询视图时,相同主键的两条记录映射问题【已解决】的相关文章

Hibernate 查询排序与联合主键映射

1.查询排序 (1)数据库排序(推荐) <map order-by="name ase" > <!--name的升序,降序desc--> session.createQuery(" ").uniqueResult() //返回唯一的对象,前台对象只有一个 <set order-by="name asc"> (2)内存排序 <set sort="natural" > sort属性值

PostgreSQL使用MyBatis,insert时返回主键

MyBatis中普通的insert语句是这样的: <insert id="insert" parameterType="com.xxx.xxx.xxDo"> insert into "table_name" (key, value) values (#{key,jdbcType=VARCHAR}, #{value,jdbcType=VARCHAR}) </insert> 此时Dao接口的public Integer ins

mybatis添加记录时返回主键id

参考:https://www.cnblogs.com/nuccch/p/7687281.html 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作.在使用mybatis作为ORM组件时,可以很方便地达到这个目的.鉴于mybatis目前已经支持xml配置和注解2种方式,所以分别给予详细介绍. 数据表设计: drop table if exists `test`; create table `test` ( `id` bigint(20) NOT NU

ORACLE: 查询(看)表的主键、外键、唯一性约束和索引

ORACLE: 查询(看)表的主键.外键.唯一性约束和索引 1.查找表的所有索引(包括索引名,类型,构成列) select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 表名 2.查找表的主键(包括名称,构成列): select cu.* from user_co

insert时出现主键冲突的处理方法

使用"insert into"语句进行数据库操作时可能遇到主键冲突,用户需要根据应用场景进行忽略或者覆盖等操作.总结下,有三种解决方案来避免出错. 测试表:CREATE TABLE `device` (`devid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,`status` enum('alive','dead','down','readonly','drain') DEFAULT NULL,`spec_char` varchar(1

Oracle查询--增加--删除--修改主键

对Oracle表主键的操作,有四类:查询,增加,修改,删除 1.查询主键 /*查询某个表中存在的约束*/ select * from user_constraints where table_name='表名大写'; 查询结果显示约束类型,约束名称,不显示约束在哪个字段上 /*查询某个表各字段约束*/ select * from user_cons_columns where table_name='表名大写'; 查询结果显示约束名称,字段名称,不显示约束类型 /*查询某个表的主键约束*/ se

SQLServer 分组查询相邻两条记录的时间差

原文:SQLServer 分组查询相邻两条记录的时间差 首先,我们通过数据库中表的两条记录来引出问题,如下图 以上为一个记录操作记录的表数据.OrderID为自增长列,后面依次为操作类型,操作时间,操作人. 现在的问题是:要求筛选出数据库中从“接收”到“送出”的时间差超过2天的全部记录.即如上图两笔单据中,红色框既是要筛选出的,绿色框为正常过滤的. 为了定位相邻记录,方法为给查询语句的返回记录加个自动编号列放入临时表中,再对临时表进行操作. --1.首先查出表中符合條件的所有信息 select

LigerUi-Js中Grid行修改时,不执行保存事件的原因?(已解决)

(1) (2)下面代码写在grid上面 function itemclick1(item) { var editingrow = grid.getEditingRow(); switch (item.text) { case "增加": if (editingrow == null) { grid.addEditRow(); } else { LG.tip('请先提交或取消'); } break; case "修改": var selected = grid.get

关于Hibernate级联更新插入信息时提示主键不为空的问题“org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 ”

org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 出现这一错误的主要原因有两个       使用的是hibernate的saveOrUpdate方法保存实例.saveOrUpdate方法要求ID为null时才执行SAVE,在其它情况下执行UPDATE.在保存实例的时候是新增,但你的ID不为null,