2011-11-28 17 views
6

Estoy intentando usar Netbeans 7.01 para seguir un tutorial en JSF 2.0 y JPA. Estoy usando Oracle XE y JDBC_6. Utilicé páginas JSF desde el asistente de entidades para generar mis páginas JSF. Todo funciona bien, ya que puedo recuperar datos de la base de datos y mostrarlos. Sin embargo, cuando intento crear o actualizar un registro en la base de datos, me sale este error:Mensaje de error de persistencia: se ha proporcionado incorrectamente una instancia de una PK nula para la operación de búsqueda

An instance of a null PK has been incorrectly provided for the find operation

cómo es esto provocó y cómo puedo solucionarlo?

+0

¿Qué bit de PK nulo pasó para "buscar" no entiende? (y compáralo con lo que realmente pasas al método em.find). – DataNucleus

Respuesta

9

Básicamente, esto significa que usted hizo lo siguiente:

Entity entity = em.find(Entity.class, null); 

Tenga en cuenta que el PK es null aquí. Para solucionar su problema, solo asegúrese de que sea , nonull.

4

Esto puede deberse a que está ejecutando una operación de búsqueda en una entidad que aún no se ha conservado. En qué situación, el campo @ID (si se autogenera), no tendrá un valor, es decir. será nulo. Luego está tratando de encontrar la entidad, y como señala @BalusC, está enviando un valor nulo a su método de búsqueda.

2

Significa que cuando intenta persistir una entidad, está enviando el PK de la entidad como nulo.

Así que tienes tres opciones:

  • definir manualmente el PK para la Entidad.
  • Si su base de datos utiliza un tipo Serial (Informix, MS SQLSERVER, etc.), el RDMS autoincrementará mediante el uso de la estrategia IDENTITY, por lo que ahora puede pasar el valor nulo para el pk de su entidad.

    @Entity 
    public class Inventory implements Serializable { 
         @Id 
         @GeneratedValue(strategy=GenerationType.IDENTITY) 
         private long id; 
    
  • Si su base de datos utiliza una secuencia para generar PKS (Oracle, PostgreSQL, etc), entonces el valor será proporcionado por una secuencia de esta manera puede utilizar:

    @Entity 
    public class Inventory implements Serializable { 
        @Id 
        @GeneratedValue(generator="InvSeq") 
        @SequenceGenerator(name="InvSeq",sequenceName="INV_SEQ", allocationSize=5) 
        private long id; 
    

Para obtener más información usted puede ver: http://wiki.eclipse.org/EclipseLink/Examples/JPA/PrimaryKey

Cuestiones relacionadas