java - joined - Hibernar: Cómo anular un atributo de una súper clase asignada
mappedsuperclass jpa (2)
¿Por qué no anotar la id
de GenericEntity con @Id
? Tampoco debe redefinir el id
sino que debe colocar @AttributeOverride(name = "id", column = @Column(name = "ID"))
en la clase en lugar de en un campo.
Editar:
Estamos usando esto en nuestra clase base ( package.OurTableGenerator
es nuestra propia implementación):
@GeneratedValue ( generator = "ourTableGenerator", strategy = GenerationType.TABLE )
@GenericGenerator ( name = "ourTableGenerator", strategy = "package.OurTableGenerator",
parameters = { @Parameter ( name = OurTableGenerator.TABLE_PARAM, value = "t_sequence" ),
@Parameter ( name = OurTableGenerator.SEGMENT_COLUMN_PARAM, value = "c_entity" ),
@Parameter ( name = OurTableGenerator.VALUE_COLUMN_PARAM, value = "c_nextHi" ),
@Parameter ( name = OurTableGenerator.INCREMENT_SIZE_COLUMN_PARAM, value = "c_blocksize" ) } )
@Id
@Column(name = "c_uid")
private Long uid;
Esto nos permite especificar una secuencia y un tamaño de bloque diferentes por entidad / tabla.
Para su propio generador de tablas podría subclase org.hibernate.id.TableGenerator
.
La entidad genérica, super clase:
@MappedSuperclass
public abstract class GenericEntity {
private Integer id;
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
}
El pojo
@Entity
@Table(name = "POJO_ONE")
@SequenceGenerator(name = "HB_SEQ_POJO_ONE", sequenceName = "SEQ_POJO_ONE", allocationSize = 1)
public class PojoOne extends GenericEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "HB_SEQ_POJO_ONE")
@Column(name = "ID")
@AttributeOverride(name = "id", column = @Column(name = "ID"))
private Integer id;
@Override
public Integer getId() {return id;}
}
Intento usar estas anotaciones: @AttributeOverride, @Id, ... pero no funciona. ¿Me puedes ayudar? Quiero anular el atributo "id" para especificar otro nombre de columna y una secuencia por pojo / tabla. ¿Cuál es la mejor manera de hacer eso?
Intenta esto, en su lugar
@MappedSuperclass
public abstract class GenericEntity {
private Integer id;
...
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
}
@Entity
@Table(name = "POJO_ONE")
@SequenceGenerator(name = "HB_SEQ_POJO_ONE", sequenceName = "SEQ_POJO_ONE", allocationSize = 1)
@AttributeOverride(name = "id", column = @Column(name = "ID"))
public class PojoOne extends GenericEntity {
// we should not define id here again
...
@Override
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "HB_SEQ_POJO_ONE")
public Integer getId() {return id;}
}