Q
冬眠唯一约束
1
A
回答
4
休眠创建该列有“独特”的指标,它是那么强制执行uniquness数据库。
举例来说,如果你有一个类:
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class UserEmailAddressEntity {
@Id
@Basic(optional = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Basic(optional = false)
private boolean primaryEmail;
@ManyToOne(optional = false)
private UserEntity user;
@NaturalId // this means the email column must be unique
@Basic(optional = false)
private String email;
@Basic(optional = false)
private String token;
@Basic(optional = false)
private boolean verified;
}
休眠创建一个表像这样:(PostgreSQL的,但这个想法是一样的几乎所有RDBMS)
CREATE TABLE useremailaddressentity
(
id bigint NOT NULL,
email character varying(255) NOT NULL,
primaryemail boolean NOT NULL,
token character varying(255) NOT NULL,
verified boolean NOT NULL,
user_id bigint NOT NULL,
CONSTRAINT useremailaddressentity_pkey PRIMARY KEY (id),
CONSTRAINT fk279a5e06c843ec30 FOREIGN KEY (user_id)
REFERENCES userentity (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
-- note the `UNIQUE` here:
CONSTRAINT useremailaddressentity_email_key UNIQUE (email)
)
0
我试图复制这种行为,我使用使用grails 1.3.7,并发现它是可重复的
class Child {
String name
static constraints = { name(unique:true) }
}
table created
CREATE TABLE `child` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
)
查询上 child.save()发射
Hibernate: select this_.id as id0_0_, this_.version as version0_0_, this_.created_by as created3_0_0_, this_.date_created as date4_0_0_, this_.last_updated as last5_0_0_, this_.name as name0_0_, this_.updated_by as updated7_0_0_ from child this_ where this_.name=?
Hibernate: insert into child (version, created_by, date_created, last_updated, name, updated_by) values (?, ?, ?, ?, ?, ?)
究其原因,我想我休眠触发以上查询是检查唯一约束,而如果你试图执行更新那么这个查询将导致另一个在内存中具有相同标识符的对象,这可能导致非唯一性观察。
我以为这是hibernate而不是grails,没有在java/hibernate中双重检查过这个。
感谢
相关问题
- 1. 空约束,许多冬眠
- 2. 唯一约束
- 3. 唯一约束(SchemaName.DATA1_PK)
- 4. 唯一约束值
- 5. 唯一约束JayData
- 6. 唯一约束Nhibernate
- 7. 唯一约束vs唯一索引
- 8. Oracle唯一约束和唯一索引
- 9. 外键约束孩子在一,在JPA的一个关系冬眠
- 10. PK和唯一约束
- 11. 多列唯一约束
- 12. 复合唯一约束SQL
- 13. 笨ORA-00001:唯一约束
- 14. 在唯一键约束
- 15. DataTable上的唯一约束
- 16. 多列唯一约束
- 17. HABTM - 唯一性约束
- 18. DB2 - 唯一约束多列
- 19. 唯一约束异常(SQLIntegrityConstraintViolationException)
- 20. 主键与唯一约束?
- 21. 唯一约束外键列
- 22. JPA唯一约束验证
- 23. 违反唯一键约束
- 24. SQLite中的唯一约束
- 25. 添加唯一约束列
- 26. Grails的唯一约束
- 27. 一对多冬眠
- 28. 唯一约束的命名约定
- 29. 如何避免使用休眠时违反唯一约束?
- 30. JPA /休眠 - 使用唯一约束作为主键
我认为一样多,但是如果你看给定链路上的评论,你会看到,当我有得天独厚的约束..休眠被射击session.save查询(实体),当我删除约束时,它不会触发,对此有什么想法? – Sudarshan 2011-05-15 13:51:24
我试图在本地重新创建该行为,但我没有任何运气,对不起:(即使有一个独特的约束,它会直接插入(对于新实体)或更新(当...更新时) – wmacura 2011-05-15 23:37:44