如何将枚举值映射到hibernate中的不同列

时间:2014-12-07 08:44:10

标签: java hibernate enums mapping

我想在我的数据库中为某些字段设置固定值,因此我声明了枚举,我想将它们映射到具有该固定值的数据库中。对此有什么最好的解决方案?

现在我编码了这个(它不起作用)

我在DB中的表:

CREATE TABLE IF NOT EXISTS `sistemaFacturacion`.`formaPago` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `tipo` INT NOT NULL,
  `descripcion` VARCHAR(100) NOT NULL,
  `fecha` DATETIME NOT NULL,
  `plazo` INT NOT NULL,
  `interes` DOUBLE NOT NULL,
  `cancelado` TINYINT(1) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB

POJO班级:

@Entity
@Table(name = "formaPago")
public class FormaPago implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -412540568702221226L;
    private Integer id;
    private FormaPagoEnum tipo;

    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }   

    @Enumerated(EnumType.ORDINAL)
    @Embedded
    public FormaPagoEnum getTipo() {
        return tipo;
    }
    public void setTipo(FormaPagoEnum tipo) {
        this.tipo = tipo;
    }

    public FormaPago(){}

}

我的枚举课程:

@Embeddable
public enum FormaPagoEnum {

    EFECTIVO("EFECTIVO", PlazoEnum.CERO, true), 
    CREDITO_QUINCE("CREDITO A QUINCE DIAS", PlazoEnum.QUINCE, false),
    CREDITO_TREINTA("CREDITO A TREINTA DIAS", PlazoEnum.TREINTA, false),
    CREDITO_SESENTA("CREDITO A SESENTA DIAS", PlazoEnum.SESENTA, false);

    private  String descripcion;
    private  Calendar fecha;
    private  PlazoEnum plazo;   
    private  boolean cancelado;

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public void setFecha(Calendar fecha) {
        this.fecha = fecha;
    }

    public void setPlazo(PlazoEnum plazo) {
        this.plazo = plazo;
    }

    public void setCancelado(boolean cancelado) {
        this.cancelado = cancelado;
    }

    @Column(name = "descripcion")
    public String getDescripcion() {
        return descripcion;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "fecha", nullable = false)
    public Calendar getFecha() {
        return fecha;
    }

    @Enumerated(EnumType.ORDINAL)
    @Embedded
    @Column(name = "plazo")
    public PlazoEnum getPlazo() {
        return plazo;
    }

    @Column(name = "cancelado")
    public boolean isCancelado() {
        return cancelado;
    }

    FormaPagoEnum(){}

    FormaPagoEnum(String descripcion, PlazoEnum plazo, boolean cancelado) {
        this.descripcion = descripcion;
        this.fecha = GregorianCalendar.getInstance();
        this.plazo = plazo;     
        this.cancelado = cancelado;
    }   
}

如果你有其他一些更好的想法,请告诉我我是如何在休眠时做的新手!

提前致谢!

0 个答案:

没有答案