views:

1159

answers:

5

I've got an app in Google App Engine that was working fine. I realized that one on of my JDO-enhanced objects that I forgot to implement equals and hashCode (I need to use the object in a set). So I did. I didn't really do anything special in these implementations, in fact I just used Eclipse to generate them. Like so:

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

@Persistent
private String appleId;

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

@Override
public boolean equals(Object obj) {
 if (this == obj)
  return true;
 if (obj == null)
  return false;
 if (getClass() != obj.getClass())
  return false;
 User other = (User) obj;
 if (appleId == null) {
  if (other.appleId != null)
   return false;
 } else if (!appleId.equals(other.appleId))
  return false;
 return true;
}

So now, when I try to hit any URLs in the app, this exception gets thrown:

/addUser javax.jdo.JDOUserException: Persistent class "Class com.bpapa.myapp.domain.User does not seem to have been enhanced. You may want to rerun the enhancer and check for errors in the output." has no table in the database, but the operation requires it. Please check the specification of the MetaData for this class. at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:427) at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:249) at com.bpapa.myapp.servlet.AddUserServlet.doPost(AddUserServlet.java:34)

Any ideas on what I did wrong?

+4  A: 

Do you have eclipse set to automatically run the datanucleus enhancer? What if you try cleaning the project with project->clean and then build the project from scratch?

Peter Recore
Doing the clean fixed things.
bpapa
+1  A: 

Configuration in eclipse ("run the datanucleus enhancer" - related issue as discussed above)

Project Settings -> Google -> App Engine -> ORM

Change src parh "src/" path to the exact "src//" path of your JDO classes

prajith
That actually did the trick for me. 10x!
Gad D Lord
A: 

Hi, how to fix this problem without Eclipse? I am not using eclipse I just have ANT.

Shekhar
A: 

How to fix this problem in netbeans ?????

lukas
A: 

There is not "Project Settings -> Google -> App Engine -> ORM" in Google Plugins for Eclipse 3.5 .

loocao