【发布时间】:2018-10-04 16:08:43
【问题描述】:
我正在使用 Spring Data JPA。鉴于此设置:
@Entity
public class Role
{
@Id
@Column(nullable = false, unique = true)
private String name;
@Column
private String info;
}
@Repository
public interface RoleRepository extends CrudRepository<Role, String>
{
}
我可以简单地插入具有相同主键 (name) 的 Role 两次。它只是更新数据库中的条目。我希望它抛出一个异常。尝试在数据库级别插入两个具有相同主键的条目会产生所需的“重复键”错误。
示例:
角色表为空
MariaDB [logz]> select * from role;
Empty set (0.00 sec)
第一次保存
roleRepository.save(new Role("name1", "info0"));
休眠先检查,再保存
Hibernate: select role0_.name as name1_3_0_, role0_.info as info2_3_0_ from role role0_ where role0_.name=?
Hibernate: insert into role (info, name) values (?, ?)
角色表已填写
MariaDB [logz]> select * from role;
+-------+-------+
| name | info |
+-------+-------+
| name1 | info0 |
+-------+-------+
1 row in set (0.00 sec)
第二次保存
roleRepository.save(new Role("name1", "info1"));
Hibernate 检查和更新 - 不过我想要一个例外!
Hibernate: select role0_.name as name1_3_0_, role0_.info as info2_3_0_ from role role0_ where role0_.name=?
Hibernate: update role set info=? where name=?
角色表已简单更新:(
MariaDB [logz]> select * from role;
+-------+-------+
| name | info |
+-------+-------+
| name1 | info1 |
+-------+-------+
1 row in set (0.00 sec)
【问题讨论】:
标签: java hibernate jpa spring-data-jpa