[
https://issues.jboss.org/browse/AS7-4576?page=com.atlassian.jira.plugin.s...
]
Scott Marlow commented on AS7-4576:
-----------------------------------
I see, so your test is showing that the prepersist notification occurs during the call to
em.persist() and that the validation happens after the em.persist() completes.
It sounds like you have discovered that the validation doesn't occur "immediately
after the point".
{quote}
3.6.1 Automatic Validation Upon Lifecycle Events
This specification supports the use of bean validation for the automatic validation of
entities upon the
pre-persist, pre-update, and pre-remove lifecycle validation events. These lifecycle
validation events
occur immediately after the point at which all the PrePersist, PreUpdate, and PreRemove
lifecycle
callback method invocations respectively have been completed, or immediately after the
point at
which such lifecycle callback methods would have been completed (in the event that such
callback
methods are not present).
{quote}
I need to understand what they mean exactly by "immediately". ;)
No ConstraintViolationException thrown by EntityManager persist upon
pre-persist constraint violation
-----------------------------------------------------------------------------------------------------
Key: AS7-4576
URL:
https://issues.jboss.org/browse/AS7-4576
Project: Application Server 7
Issue Type: Bug
Components: JPA / Hibernate
Affects Versions: 7.1.1.Final
Environment: as7.1.2-SNAPSHOT (2012-04-20)
c525e538fda12bde76b44a6db4f61d55105c1cea, hibernate4
Reporter: Marek Schmidt
Assignee: Scott Marlow
Attachments: jboss-as-kitchensink.war
Per JPA 2.0 spec 3.6.1.2 Requirements for Automatic Validation upon Lifecycle Events, the
"persistence provider must throw the
javax.validation.ConstraintViolationException" ... and the validation must occur
"immediately after the point" where callback method invocations, such as
PrePersist have been completed.
Having a Member entity with some @NonNull validator present on one of its fields, the
following test shows the javax.validation.ConstraintViolationException is not thrown while
invoking persist, but later inside flush():
{code}
try {
System.out.println("XXX: before em.persist()");
em.persist(new Member());
System.out.println("XXX: after em.persist()");
em.flush();
System.out.println("XXX: after em.flush()");
}
catch(javax.validation.ConstraintViolationException x) {
System.out.println("XXX: Constraint violation!");
}
{code}
{code}
@Entity
@XmlRootElement
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class Member implements Serializable {
...
@NotNull
@NotEmpty
@Email
private String email;
...
@PrePersist
public void prePersist() {
System.out.println("XXX: prePersist");
}
}
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira