【发布时间】:2011-02-25 13:26:35
【问题描述】:
我有一个 Keyword 和一个 KeywordType 作为实体。有很多类型的关键字。
当试图持久化一个类型的第二个关键字时,违反了唯一性约束,事务被回滚。
搜索所以我发现了几种可能性(其中一些来自不同的上下文,所以我不确定它们的有效性) - this post 和 this post 建议捕获对 Exception 没有用处我最终到达了我开始的地方,但仍然需要以某种方式保留关键字。
同样适用于针对不同情况提出的锁定here
this 和 this 帖子中提出的自定义插入语句我猜我不会正常工作,因为我使用的是 Oracle 而不是 MySQL 和希望将实现与 Hibernate 联系起来。
另一种解决方法是尝试首先在生成关键字的代码中检索类型,如果找到则将其设置在关键字上,否则创建一个新关键字。
那么,什么是最好的——最健壮、最便携(对于不同的数据库和持久性提供者)和最理智的方法呢?
谢谢。
涉及的实体:
public class Keyword {
@Id
@GeneratedValue
private long id;
@Column(name = "VALUE")
private String value;
@ManyToOne
@JoinColumn(name = "TYPE_ID")
private KeywordType type;
...
}
和
@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = { "TYPE" }) })
public class KeywordType {
@Id
@GeneratedValue
private long id;
@Column(name = "TYPE")
private String type;
...
}
【问题讨论】:
-
从应用程序的视图层来看,您知道“用户”是在创建新的关键字类型还是使用现有的关键字类型?
-
使用来自文档分析的现有文件。它会改变解决方案吗?
标签: java jpa constraints unique