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 spring:为业务逻辑做准备?_Hibernate_Spring_Entity_Business Logic - Fatal编程技术网

hibernate spring:为业务逻辑做准备?

hibernate spring:为业务逻辑做准备?,hibernate,spring,entity,business-logic,Hibernate,Spring,Entity,Business Logic,我正在使用Spring+Hibernate在MySQL数据库中创建和存储记录 在持久化记录之前,我希望我的系统生成一个随机字符串,该字符串将存储在正在存储的实体的字段中。这个随机字符串稍后将用作检索记录和确认用户输入的访问键 我想在我的实体类中使用@PrePersist注释的方法来实现这种行为。这是放置这种方法的适当位置吗 我遇到了这个问题,因为我不知道如何检查数据库表中随机字符串的唯一性,因为我想不出一种方法来引用spring的HibernateTemplate实例从entity类中执行查询

我正在使用Spring+Hibernate在MySQL数据库中创建和存储记录

在持久化记录之前,我希望我的系统生成一个随机字符串,该字符串将存储在正在存储的实体的字段中。这个随机字符串稍后将用作检索记录和确认用户输入的访问键

我想在我的实体类中使用@PrePersist注释的方法来实现这种行为。这是放置这种方法的适当位置吗

我遇到了这个问题,因为我不知道如何检查数据库表中随机字符串的唯一性,因为我想不出一种方法来引用spring的HibernateTemplate实例从entity类中执行查询

任何建议都将不胜感激

在持久化记录之前,我希望我的系统生成一个随机字符串,该字符串将存储在正在存储的实体的字段中

PrePersist
生命周期回调方法确实非常适合这个用例

我遇到了这个问题,因为我不知道如何检查数据库表中随机字符串的唯一性,因为我想不出一种方法来引用spring的HibernateTemplate实例从entity类中执行查询

HibernateTemplate
/
JpaTemplate
,实际上,如果不锁定整个表,就无法使用SQL查询(至少不是以100%确定的方式)检查值的唯一性,您可能不希望这样。如果没有对整个表的锁定,您可能会面临争用条件:当线程T1将执行select时,线程T2可能会插入T1未找到并首先提交的值,从而导致T1的后续插入失败


换句话说,保证唯一性或列的唯一方法是插入记录并提交事务(数据库可以使用延迟约束检查,因此需要提交)。

@PrePersist是JPA,而不是hibernate。如果您使用JPA,您应该使用JpaTemplate,而不是HibernateTemplate。感谢Seanizer,我对Hibernate和JPA是新手。我在Hibernate文档中找到了PrePersist注释,但是您使用JpaTemplate而不是HibernateTemplate可能是正确的。但是实体类是否是我想做的事情的适当位置,以及如何从该类中检查生成的列值的唯一性?谢谢您的想法。事实上,我不想把桌子锁上。因此,如果我理解正确,我需要尝试持久化记录,例如,让数据库检查列中字段值的唯一性,并捕获数据库可能抛出的错误。“对吗?”巴里斯是的,没错。