java在提交前检查重复密钥?
我正在寻找一种解决方案,在使用JPA容器提交BeanFieldGroup之前检查重复密钥。有没有一个不使用CriteriaQuery的解决方案? 例如,当我执行commit时,有某种方法可以检查数据库中是否已经存在密钥并返回异常
我在试这个
@Entity
@Table(name="curriculum")
public class Curriculum implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long idCurriculum;
@Email
@NotEmpty
@NotNull
@Size(max=250)
@Column(unique=true)
private String email;
}
/** BeanFieldGroup */
private final BeanFieldGroup<Curriculum> binder = new BeanFieldGroup<Curriculum>(Curriculum.class);
private final Curriculum bean = new Curriculum();
/** datasources */
private final CustomJPAContainer<Curriculum> datasource = new CustomJPAContainer<Curriculum>(Curriculum.class);
private VerticalLayout buildLayout(){
vLayout = new VerticalLayout();
vLayout.setMargin(true);
vLayout.setSpacing(true);
binder.setItemDataSource(bean);
Field<?> field = null;
//email unique key on database
field = binder.buildAndBind("Email", "email", TextLower.class);
email = (TextLower)binder.getField("email");
email.setWidth("350px");
email.setMaxLength(250);
vLayout.addComponent(email);
return vLayout;
}
@Override
public void buttonClick(ClickEvent event) {
if((event.getButton()) == btnSalvar){
try {
binder.commit();
} catch (CommitException e) {
Notification.show(e.getMessage(),
Type.ERROR_MESSAGE);
}
try {
datasource.addEntity(binder.getItemDataSource().getBean());
} catch(Exception e) {
Notification.show(e.getMessage(),
Type.ERROR_MESSAGE);
return;
}
}
在进行提交之后,我做了:datasource。addEntity(binder.getItemDataSource()。getBean());如果是数据源。addEntity()不起作用,但执行一般异常
如何在提交之前检查数据库中是否已经存在电子邮件字段而不使用CriteriaQuery,有一种方法吗
有什么想法吗
# 1 楼答案
将数据库更改为具有唯一索引。当您尝试插入重复数据时,它将引发异常
# 2 楼答案
这个怎么样(根据斯维特林·扎雷夫的建议):