Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 冬眠仅保存未持久化的对象_Hibernate_Insert_Unique - Fatal编程技术网

Hibernate 冬眠仅保存未持久化的对象

Hibernate 冬眠仅保存未持久化的对象,hibernate,insert,unique,Hibernate,Insert,Unique,我需要使hibernate只保存未持久化的对象。如果此对象已被持久化,则hibernate必须不执行任何操作或更改持久化对象的id。cource equals和hashCode方法的有效性很好。 我可以通过配置或类似预插入侦听器的方式来实现吗? 例如: session.beginTransaction(); ElementToPersist element = new ElementToPersist(); element.setName("Element"); element.setValue

我需要使hibernate只保存未持久化的对象。如果此对象已被持久化,则hibernate必须不执行任何操作或更改持久化对象的id。cource equals和hashCode方法的有效性很好。 我可以通过配置或类似预插入侦听器的方式来实现吗? 例如:

session.beginTransaction();
ElementToPersist element = new ElementToPersist();
element.setName("Element");
element.setValue("Value");

session.save(element);
session.getTransaction().commit();

session.beginTransaction();
ElementToPersist element2 = new ElementToPersist();
element2.setName("Element");
element2.setValue("Value");

session.save(element2);
session.getTransaction().commit();
在我的例子中,这两个元素将使用不同的id持久化。如何使hibernate在插入之前检查此元素的存在性?你能展示最好的练习吗?
谢谢。

使用查询检查数据库中是否存在元素,并仅在不存在时插入。请注意,这应该由数据库约束强制执行,因为如果两个事务同时检查并插入同一元素,则可能会有竞争条件。

使用查询检查数据库中是否存在这些元素,并且仅当不存在时才插入。请注意,这应该通过数据库约束来实现,因为如果两个事务同时检查并插入同一元素,则可能会出现竞争条件。

不幸的是,由于架构异常,我无法添加约束。如果另一个对象与此元素有多对一关联,并且它也必须被持久化,我该怎么办?那么,根据具体情况,您可以初始化与数据库中已存在的元素或刚刚持久化的元素的多对一关联。因此,您的意思是我必须像session.createQueryFromElementToPersist那样执行查询,其中o=?然后手动保存此对象?否。此查询将获取与要持久化的元素具有相同ID的元素,而该元素没有ID。如果名称和值构成对象的功能键,则查询应该是从ElementToPersist o中选择o,其中o.name=:name和o.value=:value。然后,如果此查询返回某些内容,则不能持久化任何内容。如果它没有返回任何东西,那么你必须持久化这个对象。如果你一次持久化几个元素,并且你必须检查每个元素是否唯一,那么你必须明确地检查它。一次将一个实体与许多其他实体保持在一起是非常罕见的。特别是如果其他的很多都不是一个拥有的。不幸的是,我没有能力添加约束,因为不正常的架构。如果另一个对象与此元素有多对一关联,并且它也必须被持久化,我该怎么办?那么,根据具体情况,您可以初始化与数据库中已存在的元素或刚刚持久化的元素的多对一关联。因此,您的意思是我必须像session.createQueryFromElementToPersist那样执行查询,其中o=?然后手动保存此对象?否。此查询将获取与要持久化的元素具有相同ID的元素,而该元素没有ID。如果名称和值构成对象的功能键,则查询应该是从ElementToPersist o中选择o,其中o.name=:name和o.value=:value。然后,如果此查询返回某些内容,则不能持久化任何内容。如果它没有返回任何东西,那么你必须持久化这个对象。如果你一次持久化几个元素,并且你必须检查每个元素是否唯一,那么你必须明确地检查它。一次将一个实体与许多其他实体保持在一起是非常罕见的。特别是如果许多其他人不属于这个人。