我正在使用Spring + Hibernate在MySQL数据库中创建和存储记录。
在保留记录之前,我希望我的系统生成一个随机字符串,该字符串将存储在正在存储的实体的字段中。这个随机字符串稍后将用作访问键来检索记录并确认用户的输入。
我想在我的实体类中使用@PrePersist注释的方法来实现这种行为。这是放置这种方法的合适位置吗?
这个问题发生在我身上,因为我不知道如何检查数据库表中随机字符串的唯一性,因为我想不出一种方法来引用spring的HibernateTemplate实例来从实体类中进行查询。
非常感谢任何建议。
答案 0 :(得分:0)
在保留记录之前,我希望我的系统生成一个随机字符串,该字符串将存储在正在存储的实体的字段中。
PrePersist
生命周期回调方法对于这个用例确实是完美的。
这个问题发生在我身上,因为我不知道如何检查数据库表中随机字符串的唯一性,因为我想不出一种方法来引用spring的HibernateTemplate实例来从实体类中进行查询。
HibernateTemplate
/ JpaTemplate
与否,实际上没有办法在不锁定整个表的情况下使用SQL查询(至少不是以100%确定的方式)检查值的唯一性你可能不想那样。如果没有对整个表的锁定,您可能面临竞争条件:当线程T1执行选择时,线程T2可以插入T1未找到并首先提交的值,导致后续插入从T1失败
换句话说,保证唯一性或列的唯一方法是插入记录并提交事务(数据库可以使用延迟约束检查,因此需要提交)。