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