Java 如何解决UniqueFieldConstraintViolationException db4o
代码运行正常,但给我一个我无法控制的异常,这是控制台消息:Java 如何解决UniqueFieldConstraintViolationException db4o,java,Java,代码运行正常,但给我一个我无法控制的异常,这是控制台消息: The person with this DNI es already exists Exception in thread "main" com.db4o.constraints.UniqueFieldValueConstraintViolationException: class: Vehiculo field: matricula at com.db4o.constraints.UniqueFieldValueConstr
The person with this DNI es already exists
Exception in thread "main" com.db4o.constraints.UniqueFieldValueConstraintViolationException: class: Vehiculo field: matricula
at com.db4o.constraints.UniqueFieldValueConstraint$1.ensureSingleOccurence(UniqueFieldValueConstraint.java:66)
at com.db4o.constraints.UniqueFieldValueConstraint$1.onEvent(UniqueFieldValueConstraint.java:97)
at com.db4o.internal.events.Event4Impl.trigger(Event4Impl.java:78)
at com.db4o.internal.events.EventRegistryImpl$4.run(EventRegistryImpl.java:123)
at com.db4o.foundation.DynamicVariable.with(DynamicVariable.java:54)
at com.db4o.internal.InCallback.run(InCallback.java:24)
at com.db4o.internal.events.EventRegistryImpl.withExceptionHandlingInCallback(EventRegistryImpl.java:279)
at com.db4o.internal.events.EventRegistryImpl.commitOnStarted(EventRegistryImpl.java:121)
at com.db4o.internal.LocalTransaction.dispatchCommittingCallback(LocalTransaction.java:89)
at com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:66)
at com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:59)
at com.db4o.internal.LocalObjectContainer.commitTransaction(LocalObjectContainer.java:689)
at com.db4o.internal.LocalObjectContainer.close2(LocalObjectContainer.java:94)
at com.db4o.internal.ObjectContainerBase.close1(ObjectContainerBase.java:361)
at com.db4o.internal.ObjectContainerBase.close(ObjectContainerBase.java:344)
at Principal.main(Principal.java:38)
import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.config.EmbeddedConfiguration;
import com.db4o.constraints.UniqueFieldValueConstraint;
import com.db4o.constraints.UniqueFieldValueConstraintViolationException;
import com.db4o.query.Query;
public class Principal {
public static void main(String[] args) {
EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();
config.common().objectClass(Persona.class).objectField("dni").indexed(true);
config.common().add(new UniqueFieldValueConstraint(Persona.class, "dni"));
ObjectContainer bbdd = Db4oEmbedded.openFile(config, "databaserrr.db4o");
Persona p = new Persona("Pepe2", 25, "50667847L");
try{
bbdd.store(p);
bbdd.commit();
System.out.println("Se ha guardado correctamente");
Query q = bbdd.query();
q.constrain(Persona.class);
ObjectSet<Persona> res = q.execute();
}catch (UniqueFieldValueConstraintViolationException e) {
System.out.println("The person with this DNI es already exists");
}finally{
bbdd.close();
}
}
}
我找到了捕获异常的解决方案:
catch (UniqueFieldValueConstraintViolationException e) {
System.out.println("The person with this DNI es already exists");
bbdd.rollback();
}
catch (UniqueFieldValueConstraintViolationException e) {
System.out.println("The person with this DNI es already exists");
bbdd.rollback();
}