Datanucleus – WrongPrecisionException

julio 20, 2012

Cuando quieres utilizar una tabla existente para algún objeto persistente, puedes utilizar algunas anotaciones para indicarle a Datanucleus que tabla utilizar y a que columnas mapear las propiedades. Por ejemplo:

@PersistenceCapable(schema="CATALOGOS",table="TPRODUCTOS")
public class Producto {

@PrimaryKey
@Persistent(column="SPRODUCT_ID")
String id;
@Persistent(column="SNAME")
String nombre;

public Producto() {
}

public String getId() {
return id;
}

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

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

}

En este ejemplo le indicamos a Datanucleus que queremos utilizar la tabla “TPRODUCTOS” en el esquema “CATALOGOS” para persistir los objetos de tipo Producto. También le indicamos los nombres de las columnas, ya que muchas veces no es el mismo que en nuestros objetos -sobretodo con tablas ya existentes-. Bueno, pues al ejecutar la validación del esquema mediante el comando “mvn datanucleus:schema-validate” me arrojaba la siguiente excepción:

org.datanucleus.store.rdbms.exceptions.WrongPrecisionException: Expected primary key for table CATALOGOS.TPRODUCTOS.SNAME 50 not found in existing keys 256

Al principio pensé que tenía que ver con que la tabla no tuviera un PRIMARY KEY, pero al volver a leer el mensaje me di cuenta que el tipo de la excepción es WrongPrecisionException. Pues resulta que como parte de la validación del esquema se verifican las restricciones de longitud por lo que fue necesario especificarla de la siguiente manera

@Persistent(column="SNAME")
@Column(length=50)
String nombre;

Fuentes:
http://stackoverflow.com/questions/9540470/how-to-create-a-jdo-datanucleus-key-string-field-of-unknown-size
http://www.datanucleus.org/products/accessplatform_3_1/schematool.html#maven2

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: