L’entité JPA n’a pas de clé primaire?

J’ai une classe d’entité:

@Entity @Table(name="CMC_MAP_SERVER_INFO") @NamedQuery(name="CmcMapServerInfo.getMapServer", query="SELECT c FROM CmcMapServerInfo c") public class CmcMapServerInfo implements Serializable { private static final long serialVersionUID = 1L; @Column(name="APPLICATION_NAME") private Ssortingng applicationName; private Ssortingng remarks; @Column(name="SERVER_IP") private Ssortingng serverIp; @Column(name="SERVER_NAME") private Ssortingng serverName; @Column(name="SERVER_PORT") private short serverPort; public CmcMapServerInfo() { } 

Je reçois l’erreur suivante:

 Entity class [class cdot.oss.cmsat.conf.ejb.entity.CmcMapServerInfo] has no primary key specified. 

J’ai lu en ligne et découvert que les entités doivent avoir une clé primaire définie. Mais ma table ici est une table à une rangée seulement. C’est juste utilisé pour sauvegarder la configuration du système.

Donc, seules les requêtes que je voudrais faire seront pour vérifier si la ligne existe, puis obtenir cette ligne et la mettre à jour.

Mes colonnes sont serverIp, port, nom du serveur .

Comment dois-je procéder pour supprimer cette erreur?

JPA 2.0 Specification

  • La classe d’entité doit être annotée avec l’annotation d’ Entity .
  • La classe d’entité doit avoir un constructeur no-arg.
  • La classe d’entité ne doit pas être finale
  • La classe d’entité doit implémenter les interfaces Serializable .
  • La classe d’entité doit avoir un ID unique et immuable

Sinon, vous ne pouvez pas.

J’ai eu ce problème aussi avec un message sans PK.

Dans Oracle, vous pouvez utiliser la colonne ROWID qui est toujours présente pour toutes les tables.

Comme ça:

 @Id @Column(name="ROWID") Ssortingng rowid; 

J’espère que cela aide…

Chaque object entité de la firebase database est identifié de manière unique. Une autre façon de représenter une table sans clé primaire consiste à utiliser une clé primaire composite utilisant toutes ses colonnes, ou certaines d’entre elles représentant une clé candidate:

 @Entity public class TableWithoutId { @EmbeddedId EmbeddableTableWithoutId id; /* Getters an Setters... */ //Here you can implement @Transient delegates to the Getters an Setters of "id". } @Embeddable Class EmbeddableTableWithoutId { int columnA; long columnB; /* Getters an Setters... */ } 

Peut-être aurez-vous des problèmes avec [Select By Id]:

 entityManager.find(TableWithoutId.class, id);//it can throws NonUniqueResultException or anything like that... 

Prenez soin de vous et soyez heureux !!!

Vous pouvez marquer le nom de l’application ou l’adresse IP en tant que clé primaire (même si elle n’est pas générée automatiquement). C’est correct même si aucune de ces colonnes n’est déclarée comme clé primaire dans la firebase database.