Hi,
I have this class:
Code:
public class Periodo extends Entidad {
private String codigo;
private Date desde;
private Date hasta;
private transient Ambar ambar;
public Periodo() {}
public Periodo(String codigo, Date desde, Date hasta) {
setCodigo(codigo);
setDesde(desde);
setHasta(hasta);
}
private EstadoPeriodo estadoActual = new EstadoPendiente();
public void activar() {
estadoActual = estadoActual.activar();
}
public void emitir() {
estadoActual = estadoActual.emitir();
}
public String getEstado() {
return estadoActual.toString();
}
public abstract class EstadoPeriodo {
public EstadoPeriodo activar() throws IllegalStateException {
throw new IllegalStateException("activar: Estado de periodo inválido");
}
public EstadoPeriodo emitir() throws IllegalStateException {
throw new IllegalStateException("activar: Estado de periodo inválido");
}
public abstract String toString();
}
private class EstadoPendiente extends EstadoPeriodo {
public EstadoPeriodo activar() throws IllegalStateException {
return new EstadoActivo();
}
public String toString() { return "Pendiente"; }
}
private class EstadoActivo extends EstadoPeriodo {
public EstadoPeriodo emitir() throws IllegalStateException {
return new EstadoEmitido();
}
public String toString() { return "Activo"; }
}
private class EstadoEmitido extends EstadoPeriodo {
public String toString() { return "Emitido"; }
}
, the table:
Code:
CREATE SEQUENCE sc_periodo;
CREATE TABLE periodo (
id INTEGER NOT NULL,
codigo VARCHAR(16) NOT NULL,
desde DATE NOT NULL,
hasta DATE NOT NULL,
estado CHAR(1) NOT NULL CHECK(estado IN('A', 'P', 'E')),--Activo, Pendiente, Emitido
PRIMARY KEY(id),
UNIQUE(codigo),
CHECK(desde < hasta)
);
and the mapping:
Code:
<class name="ambar.modelo.periodo.Periodo" table="periodo">
<id name="id" column="id" unsaved-value="-1">
<generator class="sequence">
<param name="sequence">sc_periodo</param>
</generator>
</id>
<property name="codigo" column="codigo"/>
<property name="desde" column="desde"/>
<property name="hasta" column="hasta"/>
</class>
as you can see the mapping is incomplete. How should i map the classes inherited from EstadoPeriodo.
Reading the reference, i understand i use component. but i just don´t get how can i do this.
thanks a lot, in advance for any help,
Juan Romero