2011-04-24 5 views
0

je suis arrivé cette erreur tout en générant générique pour mon modèle via le script de compilation ANT:JPA 2: EclipseLink de construction Ant Erreur

Internal Exception: Exception [EclipseLink-7161] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.ValidationException 
Exception Description: Entity class [class com.ckd.model.BookModel] has no primary key specified. It should define either an @Id, @EmbeddedId or an @IdClass. If you have defined PK using any of these annotations then make sure that you do not have mixed access-type (both fields and properties annotated) in your entity class hierarchy. 

Voilà ma classe d'entité:

@Entity 
@Table(name = "BOOK") 
public class BookModel implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

// @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "ID", unique = true, nullable = false) 
    private Long id; 

    @Id 
    @NotNull 
    @Size(min = 32, max = 32) 
    @Column(name = "HASHID", unique = true, nullable = false) 
    private String hashid; 

    @NotNull 
    @Size(min = 1, max = 255) 
    @Column(name = "TITLE") 
    public String title; 

    @NotNull 
    @Size(min = 1, max = 255) 
    @Column(name = "AUTHOR") 
    private String author; 

    @Lob 
    @NotNull 
    @Column(name = "CONTENT") 
    private String content; 

    @Size(min = 2, max = 3) 
    @Column(name = "LANG") 
    public String lang; 

    // getters and setters here 
} 

J'ai également ajouté ce à mon entité mais cela ne fait aucune différence:

@Entity 
@Access(AccessType.FIELD) 

Construction de mon projet par rapport aux bibliothèques EclipseLink fournies avec G lassfish 3.1 ou en utilisant les bibliothèques autonomes EclipseLink v2.x.x de http://www.eclipse.org/eclipselink/downloads/ ne font également aucune différence - toujours eu l'erreur ci-dessus.

Mon persistence.xml est sous le répertoire WebContent\META-INf conformément aux exigences du projet Java EE. Le contenu de celui-ci est:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 
    <persistence-unit name="persistentUnit" transaction-type="JTA"> 
     <description>Persistent Unit for Entity Classes</description> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>jdbc/prod1</jta-data-source> 
     <class>com.ckd.model.BookModel</class> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="eclipselink.jdbc.DBDictionary" value="mysql(DriverVendor=mysql)" /> 
      <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.MySQLPlatform" /> 
      <property name="eclipselink.jdbc.DBDictionary" value="searchStringEscape=\\" /> 
      <property name="eclipselink.jdbc.QuerySQLCache" value="false" /> 
      <property name="eclipselink.weaving" value="false" /> 
      <property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.DefaultSessionLog" /> 
      <property name="eclipselink.logging.level" value="FINEST" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Comment puis-je résoudre cette erreur? Est-ce un bug avec l'implémentation actuelle d'EclipseLink 2.x.x?

Répondre

0

Il s'agissait d'une entrée d'entité inutilisée isolée dans orm.xml qui provoquait l'erreur ci-dessus. Commentez que l'entrée d'entité inutilisée a corrigé l'erreur ci-dessus.

0

, vous devez décommenter l'annotation @Id dans votre classe

private static final long serialVersionUID = 1L; 

// @Id <------ HERE 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "ID", unique = true, nullable = false) 
private Long id; 
...... 
Questions connexes