Como mapear com JPA vários atributo classe com vários campos

2 respostas
M

Colegas, estou com o seguinte problema:

Tenho uma tabela de configuração semanal, nela, pra cada dia da semana possui 6 campos, como mostra a estrutura abaixo

Create da tabela bem básica
CREATE TABLE TB_HORARIO_PADRAO (
    COD_HORARIO_PADRAO       INTEGER NOT NULL,
    NOM_HORARIO_PADRAO       VARCHAR(100) NOT NULL,
    IND_TRABALHA_FERIADO     CHAR(1) NOT NULL,

    IND_EXPEDIENTE_DOM       CHAR(1) DEFAULT 'N' NOT NULL,
    QTD_HORAS_DOM            INTEGER DEFAULT 8 NOT NULL,
    QTD_HORA_ALMOCO_MIN_DOM  INTEGER DEFAULT 1 NOT NULL,
    HOR_INICIAL_DOM          CHAR(5) DEFAULT '08:00' NOT NULL,
    HOR_FINAL_DOM            CHAR(5) DEFAULT '17:00' NOT NULL,
    QTD_MIN_TOLERANCIA_DOM   INTEGER DEFAULT 15 NOT NULL,

    IND_EXPEDIENTE_SEG       CHAR(1) DEFAULT 'N' NOT NULL,
    QTD_HORAS_SEG            INTEGER DEFAULT 8 NOT NULL,
    QTD_HORA_ALMOCO_MIN_SEG  INTEGER DEFAULT 1 NOT NULL,
    HOR_INICIAL_SEG          CHAR(5) DEFAULT '08:00' NOT NULL,
    HOR_FINAL_SEG            CHAR(5) DEFAULT '17:00' NOT NULL,
    QTD_MIN_TOLERANCIA_SEG   INTEGER DEFAULT 15 NOT NULL,

    IND_EXPEDIENTE_TER       CHAR(1) DEFAULT 'N' NOT NULL,
    QTD_HORAS_TER            INTEGER DEFAULT 8 NOT NULL,
    QTD_HORA_ALMOCO_MIN_TER  INTEGER DEFAULT 1 NOT NULL,
    HOR_INICIAL_TER          CHAR(5) DEFAULT '08:00' NOT NULL,
    HOR_FINAL_TER            CHAR(5) DEFAULT '17:00' NOT NULL,
    QTD_MIN_TOLERANCIA_TER   INTEGER DEFAULT 15 NOT NULL,

    IND_EXPEDIENTE_QUA       CHAR(1) DEFAULT 'N' NOT NULL,
    QTD_HORAS_QUA            INTEGER DEFAULT 8 NOT NULL,
    QTD_HORA_ALMOCO_MIN_QUA  INTEGER DEFAULT 1 NOT NULL,
    HOR_INICIAL_QUA          CHAR(5) DEFAULT '08:00' NOT NULL,
    HOR_FINAL_QUA            CHAR(5) DEFAULT '17:00' NOT NULL,
    QTD_MIN_TOLERANCIA_QUA   INTEGER DEFAULT 15 NOT NULL,

    IND_EXPEDIENTE_QUI       CHAR(1) DEFAULT 'N' NOT NULL,
    QTD_HORAS_QUI            INTEGER DEFAULT 8 NOT NULL,
    QTD_HORA_ALMOCO_MIN_QUI  INTEGER DEFAULT 1 NOT NULL,
    HOR_INICIAL_QUI          CHAR(5) DEFAULT '08:00' NOT NULL,
    HOR_FINAL_QUI            CHAR(5) DEFAULT '17:00' NOT NULL,
    QTD_MIN_TOLERANCIA_QUI   INTEGER DEFAULT 15 NOT NULL,

    IND_EXPEDIENTE_SEX       CHAR(1) DEFAULT 'N' NOT NULL,
    QTD_HORAS_SEX            INTEGER DEFAULT 8 NOT NULL,
    QTD_HORA_ALMOCO_MIN_SEX  INTEGER DEFAULT 1 NOT NULL,
    HOR_INICIAL_SEX          CHAR(5) DEFAULT '08:00' NOT NULL,
    HOR_FINAL_SEX            CHAR(5) DEFAULT '17:00' NOT NULL,
    QTD_MIN_TOLERANCIA_SEX   INTEGER DEFAULT 15 NOT NULL,

    IND_EXPEDIENTE_SAB       CHAR(1) DEFAULT 'N' NOT NULL,
    QTD_HORAS_SAB            INTEGER DEFAULT 8 NOT NULL,
    QTD_HORA_ALMOCO_MIN_SAB  INTEGER DEFAULT 1 NOT NULL,
    HOR_INICIAL_SAB          CHAR(5) DEFAULT '08:00' NOT NULL,
    HOR_FINAL_SAB            CHAR(5) DEFAULT '17:00' NOT NULL,
    QTD_MIN_TOLERANCIA_SAB   INTEGER DEFAULT 15 NOT NULL
);

pra nao criar uma classe java com todos esses atributos fiz o seguinte, criei a classe Horário padrão no seguinte formato (removi os get/set pra facilitar leitura):

@Entity
@Table(name = "TB_HORARIO_PADRAO")
@SequenceGenerator(name="SQ_HORARIO_PADRAO", sequenceName="SEQ_HORARIO_PADRAO", initialValue=1, allocationSize=1)
public class HorarioPadrao extends ObjetoBase {
	@Transient
	private static final long serialVersionUID = -5289202686906242455L;
	@Id
	@Column(name="COD_HORARIO_PADRAO", nullable=false, columnDefinition="Integer")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SQ_HORARIO_PADRAO")
	private Long codigo;
	@Column(name="NOM_HORARIO_PADRAO", length=100, nullable=false, unique=true)
	private String nome;
	@Enumerated(EnumType.STRING)
	@Column(name="IND_TRABALHA_FERIADO", nullable=false, columnDefinition="CHAR(1)")
	private EnumSimNao indicadorTrabalhaFeriado = EnumSimNao.Nao;
	private ConfiguracaoDiaria domingo;
	private ConfiguracaoDiaria segunda;
	private ConfiguracaoDiaria terca;
	private ConfiguracaoDiaria quarta;
	private ConfiguracaoDiaria quinta;
	private ConfiguracaoDiaria sexta;
	private ConfiguracaoDiaria sabado;
	
	public class ConfiguracaoDiaria extends ObjetoBase {

		private static final long serialVersionUID = 768114889124958530L;
		
		private EnumSimNao indicadorPossuiExpediente = EnumSimNao.Sim;
		private Integer qtdHoras = 8;
		private Integer qtdHorasMinAlmoco = 1;
		private String horaInicial = "08:00";
		private String horaFinal = "17:00";
		private Integer qtdMinutoTolerancia = 15;
	}	
}

A dúvida é, como vou poder mapear essa classe através de anotação, já que os atributos de domingo a sábado é do mesmo tipo?

obg

2 Respostas

lucasirc

eu sei que a duvida é antiga…

voce pode alterar a estrutura do banco de dados?
eu acho que essa modelagem não é melhor para o problema!

M

Olá Lucas, obrigado pela resposta.
tinha optado desta forma por ser mais simples pra eu trabalhar, mas, acabei fazendo mestre detalhe mesmo :slight_smile:

abraço

Criado 6 de abril de 2011
Ultima resposta 15 de jun. de 2011
Respostas 2
Participantes 2