Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Help! Weird EclipseLink exception

Hi Zhou,

Looks like classloading issue - please make sure that eclipselink.jar is not included on the classpath more than once.

If that's not the case, may be you could verify whether the test works with Spring 2.5?

Also it seem that you meant to use @OrderBy, not @OrderColumn annotation (@OrderColumn(name="mail_id desc") is illegal, but @OrderBy(name="mail_id desc") is ok). Does it work with OrderBy?

If not, try removing both OrderBy and OrderColumn - does it work now? If not, what the exception you are getting?

Thanks,
Andrei
----- Original Message ----- From: "Zhou" <zhou@xxxxxxxxxxxxxxxxxx>
To: <eclipselink-users@xxxxxxxxxxx>
Sent: Wednesday, December 30, 2009 3:39 AM
Subject: [eclipselink-users] Help! Weird EclipseLink exception



Hi all,
I'm new for using EclipseLink as JPA implementation as I'd like to use JPA
2.0 with latest Spring 3.
I've encountered a weird exception during unit-testing which I cannot figure
out why it happens. Please help!!

------- User.java-----------------
@Entity
@Table(name="users")
public class User {
@Id
@Column(name="username")
private String username;

@Column(name="password")
private String password;

@OneToMany(fetch=FetchType.LAZY, mappedBy="fromUser")
@OrderColumn(name="mail_id desc")
private List<UserMail> sentMails;

@OneToMany(fetch=FetchType.LAZY, mappedBy="toUser")
@OrderColumn(name="mail_id desc")
private List<UserMail> receivedMails;

public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((username == null) ? 0 : username.hashCode());
return result;
}

public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof User))
return false;
User other = (User) obj;
if (username == null) {
if (other.username != null)
return false;
} else if (!username.equals(other.username))
return false;
return true;
}
//generated getters and setters

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public List<UserMail> getSentMails() {
return sentMails;
}

public void setSentMails(List<UserMail> sentMails) {
this.sentMails = sentMails;
}

public List<UserMail> getReceivedMails() {
return receivedMails;
}

public void setReceivedMails(List<UserMail> receivedMails) {
this.receivedMails = receivedMails;
}
}

-------- Mail.java----------------------------------------
@Entity
@Table(name="mails")
public class Mail {
@Id
@Column(name="mail_id")
private long id;

@Column(name="title")
private String title;

@Column(name="content")
private String content;

@OneToMany(fetch=FetchType.LAZY, mappedBy="mail")
@OrderColumn(name="to_username asc")
private List<UserMail> shipments;
//generated getters and setters

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public List<UserMail> getShipments() {
return shipments;
}

public void setShipments(List<UserMail> shipments) {
this.shipments = shipments;
}
}

--------UserMail.java-----------------------------
@Entity
@IdClass(UserMail.Pk.class)
@Table(name="user_mails")
public class UserMail {
public static class Pk implements Serializable {
private static final long serialVersionUID = 7883097744987560068L;

private long mail;

private String fromUser;

private String toUser;

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((fromUser == null) ? 0 : fromUser.hashCode());
result = prime * result + (int) (mail ^ (mail >>> 32));
result = prime * result + ((toUser == null) ? 0 : toUser.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Pk))
return false;
Pk other = (Pk) obj;
if (fromUser == null) {
if (other.fromUser != null)
return false;
} else if (!fromUser.equals(other.fromUser))
return false;
if (mail != other.mail)
return false;
if (toUser == null) {
if (other.toUser != null)
return false;
} else if (!toUser.equals(other.toUser))
return false;
return true;
}

public long getMail() {
return mail;
}

public void setMail(long mail) {
this.mail = mail;
}

public String getFromUser() {
return fromUser;
}

public void setFromUser(String fromUser) {
this.fromUser = fromUser;
}

public String getToUser() {
return toUser;
}

public void setToUser(String toUser) {
this.toUser = toUser;
}
};

@Id
@ManyToOne
@JoinColumn(name="mail_id", referencedColumnName="mail_id")
private Mail mail;

@Id
@ManyToOne
@JoinColumn(name="from_username", referencedColumnName="username")
private User fromUser;

@Id
@ManyToOne
@JoinColumn(name="to_username", referencedColumnName="username")
private User toUser;

@Column(name="status")
private int status;

public Mail getMail() {
return mail;
}

public void setMail(Mail mail) {
this.mail = mail;
}

public User getFromUser() {
return fromUser;
}

public void setFromUser(User fromUser) {
this.fromUser = fromUser;
}

public User getToUser() {
return toUser;
}

public void setToUser(User toUser) {
this.toUser = toUser;
}

public int getStatus() {
return status;
}

public void setStatus(int status) {
this.status = status;
}
}

The exception encountered shows as follows:
----------------------------------------------------
Exception [EclipseLink-148] (Eclipse Persistence Services -
2.0.0.v20091127-r5931):
org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The container policy
[IndirectListContainerPolicy(class
org.eclipse.persistence.indirection.IndirectList)] is not compatible with
transparent indirection.
Mapping: org.eclipse.persistence.mappings.OneToManyMapping[sentMails]
Descriptor: RelationalDescriptor(User --> [DatabaseTable(users)])

Exception [EclipseLink-148] (Eclipse Persistence Services -
2.0.0.v20091127-r5931):
org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The container policy
[IndirectListContainerPolicy(class
org.eclipse.persistence.indirection.IndirectList)] is not compatible with
transparent indirection.
Mapping: org.eclipse.persistence.mappings.OneToManyMapping[receivedMails]
Descriptor: RelationalDescriptor(User --> [DatabaseTable(users)])

Local Exception Stack:
Exception [EclipseLink-148] (Eclipse Persistence Services -
2.0.0.v20091127-r5931):
org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The container policy
[IndirectListContainerPolicy(class
org.eclipse.persistence.indirection.IndirectList)] is not compatible with
transparent indirection.
Mapping: org.eclipse.persistence.mappings.OneToManyMapping[sentMails]
Descriptor: RelationalDescriptor(User --> [DatabaseTable(users)])
at
org.eclipse.persistence.exceptions.DescriptorException.invalidContainerPolicyWithTransparentIndirection(DescriptorException.java:772)
at
org.eclipse.persistence.internal.indirection.TransparentIndirectionPolicy.validateContainerPolicy(TransparentIndirectionPolicy.java:521)
at
org.eclipse.persistence.mappings.CollectionMapping.validateBeforeInitialization(CollectionMapping.java:2184)
at
org.eclipse.persistence.descriptors.ClassDescriptor.validateBeforeInitialization(ClassDescriptor.java:5260)
at
org.eclipse.persistence.descriptors.ClassDescriptor.preInitialize(ClassDescriptor.java:3323)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:429)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:406)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:671)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:633)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:230)
at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:368)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
at
org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:400)
at
org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:321)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
at
org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:336)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy12.authenticate(Unknown Source)
at test.UserServiceTest.testAuthenticate(UserServiceTest.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at
org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
at
org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at
org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Local Exception Stack:
Exception [EclipseLink-148] (Eclipse Persistence Services -
2.0.0.v20091127-r5931):
org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The container policy
[IndirectListContainerPolicy(class
org.eclipse.persistence.indirection.IndirectList)] is not compatible with
transparent indirection.
Mapping: org.eclipse.persistence.mappings.OneToManyMapping[receivedMails]
Descriptor: RelationalDescriptor(User --> [DatabaseTable(users)])
at
org.eclipse.persistence.exceptions.DescriptorException.invalidContainerPolicyWithTransparentIndirection(DescriptorException.java:772)
at
org.eclipse.persistence.internal.indirection.TransparentIndirectionPolicy.validateContainerPolicy(TransparentIndirectionPolicy.java:521)
at
org.eclipse.persistence.mappings.CollectionMapping.validateBeforeInitialization(CollectionMapping.java:2184)
at
org.eclipse.persistence.descriptors.ClassDescriptor.validateBeforeInitialization(ClassDescriptor.java:5260)
at
org.eclipse.persistence.descriptors.ClassDescriptor.preInitialize(ClassDescriptor.java:3323)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:429)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:406)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:671)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:633)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:230)
at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:368)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
at
org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:400)
at
org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:321)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
at
org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:336)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy12.authenticate(Unknown Source)
at test.UserServiceTest.testAuthenticate(UserServiceTest.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at
org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
at
org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at
org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


Many thanks!!!!

Zhou
--
View this message in context: http://old.nabble.com/Help%21-Weird-EclipseLink-exception-tp26962300p26962300.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.

_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users




Back to the top