MappingException when starting persistence unit in Embedded JBoss
esanchezros Jun 22, 2010 8:31 AMHi,
I have followed the post that shows how to test EJB3 services using TestNG and JBoss Embedded on http://hocinegrine.com/2010/06/17/unit-testing-with-jboss-embedded-ejb3-container/. The test project attached to this post uses version 1.0.0.Alpha9 of JBoss Embedded. After loading that project it works fine but when I tried to test my EJB using the same approach I had the following error:
WARN 22-06 12:06:13,786 (Ejb3Configuration.java:addXMLEntities:365) -Persistence provider caller does not implements the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null. ERROR 22-06 12:06:14,598 (AbstractController.java:incrementState:440) -Error installing to Start: name=persistence.units:jar=classes.jar,unitName=csssyncCache state=Create org.hibernate.MappingException: property not found: userDomainIdin entity: com.cognitomobile.csssync.entities.cacheresults.CacheAdd
userDomainId is an embedded id for the CacheAdd entity. The Entity CacheAdd is as follows:
import javax.persistence.*; @Entity @SqlResultSetMappings( { @SqlResultSetMapping( name="AddResultsetMappings", entities={ @EntityResult( entityClass= CacheAdd.class, fields={ @FieldResult(name="userDomainId.userAddress", column="USER_ADDRESS"), @FieldResult(name="userDomainId.domain", column="DOMAIN"), @FieldResult(name="phoneNumber", column="PHONE_NUMBER"), @FieldResult(name="pid", column="PID") } ) } ) }) @NamedNativeQuery( name = "FindAdds", query = "SELECT X.USER_ADDRESS, X.DOMAIN, X.PHONE_NUMBER, X.PID FROM CACHE C " + "RIGHT JOIN " + "(SELECT RJS.USER_ADDRESS, RJS.DOMAIN, RJS.PHONE_NUMBER, RJS.PID " + "FROM SNAPSHOT RJS " + "EXCEPT " + "SELECT RJC.USER_ADDRESS, RJC.DOMAIN, PHONE_NUMBER, PID " + "FROM CACHE RJC) AS X " + "ON X.USER_ADDRESS = C.USER_ADDRESS " + "AND X.DOMAIN = C.DOMAIN " + "WHERE C.USER_ADDRESS IS NULL", resultSetMapping = "AddResultsetMappings") public class CacheAdd { @EmbeddedId private UserDomainId userDomainId; public UserDomainId getUserDomainId() { return userDomainId; } public void setUserDomainId(final UserDomainId userDomainId) { this.userDomainId = userDomainId; } private String phoneNumber; private String pid; public String getDomain() { return userDomainId.getDomain(); } public void setDomain(String domain) { this.userDomainId.setDomain(domain); } public String getUserAddress() { return userDomainId.getUserAddress(); } public void setUserAddress(String userAddress) { this.userDomainId.setUserAddress(userAddress); } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } @Override public String toString() { return new StringBuilder() .append("User Address: ") .append(userDomainId.getUserAddress()) .append(". Domain: ") .append(userDomainId.getDomain()) .append(". Phone Number: ") .append(phoneNumber) .append(". Pid: ") .append(pid) .toString(); } }
and here is the class UserDomainId:
import javax.persistence.Embeddable; import java.io.Serializable; @Embeddable public class UserDomainId implements Serializable { private String userAddress; private String domain; public UserDomainId() {} public UserDomainId(String userAddress, String domain) { this.userAddress = userAddress; this.domain = domain; } public String getUserAddress() { return userAddress; } public String getDomain() { return domain; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } public void setDomain(String domain) { this.domain = domain; } @Override public boolean equals(Object o) { return ((o instanceof UserDomainId) && userAddress.equals(((UserDomainId)o).getUserAddress()) && domain.equals(((UserDomainId)o).getDomain())); } @Override public int hashCode() { return userAddress.hashCode() + domain.hashCode(); } }
If I deploy my EJB on a JBoss server (version 5.1.0) it works fine and I don't get the MappingException.
My questions are:
- Is this a known issue with this particular version of JBoss Embedded and EmbeddedId?
- Is there a newer version of JBoss Embedded that I should be using?
Thanks in advance.
Regards,
Eduardo