Me estaba siguiendo Hibernación: el Uso de una Clase Base para asignar Campos en Común y openjpa herencia tutorial para poner en común las columnas como ID, lastModifiedDate etc, en la tabla base.

Mi anotado asignaciones son como sigue :

BaseTable :

@MappedSuperclass
public abstract class BaseTable {
    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;

    @Column(name = "lastmodifieddate")
    private Date lastModifiedDate;
...

Persona de tabla

    @Entity
    @Table(name = "Person ")
    public class Person extends BaseTable  implements Serializable{

    @Column(name = "name")
    private String name;
...

Instrucción Create generado :

create table Person (id integer not null auto_increment,  lastmodifieddate datetime, name varchar(255), primary key (id)) ; 

Después de guardar un objeto de la Persona a la db,

Person p = new Person();
p.setName("Test");
p.setLastModifiedDate(new Date());
..

getSession().save(p);

Estoy configurando el campo de la fecha, pero, es de guardar el registro con IDENTIFICADOR generado y LastModifiedDate = null, y Name=»Prueba».

Instrucción Insert :

insert into Person (lastmodifieddate, name) values (?, ?)
binding parameter [1] as [TIMESTAMP] - <null>
binding parameter [2] as [VARCHAR] - Test

Leer por ID de consulta :
Cuando hago la consulta de hibernate (obtener Por ID) como a continuación, lee la persona por ID.

Criteria c = getSession().createCriteria(Person.class);
c.add(Restrictions.eq("id", id));
Person person= c.list().get(0);
//person has generated ID, LastModifiedDate is null

select query select person0_.id as id8_,  person0_.lastmodifieddate as lastmodi8_, person0_.name as name8_ from Person person0_
 - Found [1] as column [id8_]
 - Found [null] as column [lastmodi8_]
 - Found [Test] as column [name8_ ]

ReadAll consulta :

Query query = getSession().createQuery("from " + Person.class.getName());
List<Person> allPersons=query.list();

SQL correspondiente para leer todos los

select query select person0_.id as id8_,  person0_.lastmodifieddate as lastmodi8_, person0_.name as name8_ from Person person0_
- Found [1] as column [id8_]
- Found [null] as column [lastmodi8_]
- Found [Test] as column [name8_ ]
- Found [2] as column [id8_]
- Found [null] as column [lastmodi8_]
- Found [Test2] as column [name8_ ]

Pero cuando voy a imprimir la lista en la consola, su ser más raro. es la selección de la Lista de objeto de la Persona con

  • Los campos de ID = 0 todos (¿por qué todos 0 ?)
  • LastModifiedDate = null
  • Nombre de los campos tienen valores válidos

No sé qué hay de malo aquí. Podría usted por favor, mire?

FYI,

Mi Hibernate-core versión : 4.1.2, MySQL Connector versión : 5.1.9 .

En resumen, Hay dos cuestiones aquí

  • ¿Por qué estoy recibiendo Todos los Campos de ID =0 cuando se utiliza leído todos?
  • Por qué la LastModifiedDate no está siendo insertado?
  • ¿Qué tipo de ща ‘lastmodifieddate’ en DB?
  • Su datetime . La asignación es la generación de las columnas en la base de datos de la Tabla correctamente.
  • Para id, ¿qué proveedor de persistencia estás usando?
  • Soy usando Hibernate…
  • <proveedor> en persistence.xml. HibernatePersistance?
  • Lo siento, yo no entiendo. No tengo ninguna persistence.xml archivo. Estoy usando Spring+Hibernate y Anotación para el mapeo de los objetos persistentes. Podría usted por favor decirme cuál es la persistence provider estás hablando?
  • ¿cuál es el db se utiliza? puede usted proporcionar crear la tabla de consulta, también puede habilitar la hibernación el registro de las consultas, se puede ver las consultas que se ejecutan
  • Sus MySQL. Me han publicado las consultas generadas después de la tala. Gracias.

InformationsquelleAutor gtiwari333 | 2012-06-16

1 Comentario

  1. 0

    Probar esto en BaseTable clase

    @Temporal(value = TemporalType.TIMESTAMP)
    @Column(name = "lastmodifieddate", nullable = false,
            columnDefinition = "Timestamp default CURRENT_TIMESTAMP")
    @org.hibernate.annotations.Generated(value = GenerationTime.ALWAYS)
    public Date getLastModifiedDate( )
    {
      return this.lastModifiedDate;
    }

    donde BaseTable clase debe tener @MappedSuperclass. Y debe haber una generados campo de fecha en una entidad.

    @MappedSuperclass
    public abstract class BaseTable {
    
        protected int id;
    
        protected Date lastModifiedDate;  
    
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO) //For Mysql
        //For Oracle or MSSQL @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id", unique = true, nullable = false)
        public int getId()
        {
          return this.id;
        }
    
    
        @Temporal(value = TemporalType.TIMESTAMP)
        @Column(name = "lastmodifieddate", nullable = false,
                columnDefinition = "Timestamp default CURRENT_TIMESTAMP")
        @org.hibernate.annotations.Generated(value = GenerationTime.ALWAYS)
        public Date getLastModifiedDate( )
        {
          return this.lastModifiedDate;
        }
    
    
    
    }   

Dejar respuesta

Please enter your comment!
Please enter your name here