Senhores,
Possuo em uma página uma série de:
p:selectBooleanCheckbox
Esse objeto retorna um boolean (true, false).
Gostaria de uma dica para mapear no hibernate tal atributo, minha preferencia é trabalhar no banco de dados com um small int (0 = false, 1=true)
Se você quer 1 e 0 é melhor usar int.
Para usar boolean, basta declarar o campo como boolean que o hibernate usa numa boa.
sim, na realidade tenho um tela onde possui os dias da semana que vai ter aula:
<p:panel id="diasAula">
<p:selectBooleanCheckbox id="segunda" itemLabel="#{bundle.segunda}" value="#{turmaBean.turma.segunda}" />
<p:selectBooleanCheckbox id="terca" itemLabel="#{bundle.terca}" value="#{turmaBean.turma.terca}" />
<p:selectBooleanCheckbox id="quarta" itemLabel="#{bundle.quarta}" value="#{turmaBean.turma.quarta}" />
<p:selectBooleanCheckbox id="quinta" itemLabel="#{bundle.quinta}" value="#{turmaBean.turma.quinta}" />
<p:selectBooleanCheckbox id="sexta" itemLabel="#{bundle.sexta}" value="#{turmaBean.turma.sexta}" />
<p:selectBooleanCheckbox id="sabado" itemLabel="#{bundle.sabado}" value="#{turmaBean.turma.sabado}" />
</p:panel>
Na minha Entity, está assim:
@Type(type="true_false")
@Column(name="segunda")
private boolean segunda;
@Type(type="true_false")
@Column(name="terca")
private boolean terca;
@Type(type="true_false")
@Column(name="quarta")
private boolean quarta;
@Type(type="true_false")
@Column(name="quinta")
private boolean quinta;
@Type(type="true_false")
@Column(name="sexta")
private boolean sexta;
@Type(type="true_false")
@Column(name="sabado")
private boolean sabado;
e no banco, está assim:
segunda char(1),
terca char(1),
quarta char(1),
quinta char(1),
sexta char(1),
sabado char(1),
Não sei o que ocorre, se tento inserir/atualizar pela aplicação dá erro. Agora se dou um insert manual, chamo tal tela e ela traz certinho, com os dias selecionados.
Achei um link bacana, a estrutura da entity e da tabela está igualzinha!!
Resolvido,
O problema estava ocorrendo devido outra coluna, onde eu armazeno HORAS.
[quote=robinsonbsilva]Resolvido,
O problema estava ocorrendo devido outra coluna, onde eu armazeno HORAS.[/quote]Beleza.
Coloca aí como ficou seu código final para ajudar outros.
pagina.xhtml
<p:outputLabel for="horaInicio" value="#{bundle.horaInicio}" />
<p:calendar id="horaInicio" value="#{turmaBean.turma.horaInicio}" pattern="HH:mm" timeOnly="true" mode="popup" showOn="button" minHour="#{turmaBean.minHour}" maxHour="#{turmaBean.maxHour}" requiredMessage="#{bundle.horaInicio_required}" required="true" style="width:70px;">
<f:convertDateTime pattern="HH:mm" locale="pt_br" timeZone="America/Sao_Paulo" />
</p:calendar>
<p:outputLabel for="horaFim" value="#{bundle.horaFim}" />
<p:calendar id="horaFim" value="#{turmaBean.turma.horaFim}" pattern="HH:mm" timeOnly="true" mode="popup" showOn="button" minHour="#{turmaBean.minHour}" maxHour="#{turmaBean.maxHour}" requiredMessage="#{bundle.him_required}" required="true" style="width:70px;">
<f:convertDateTime pattern="HH:mm" locale="pt_br" timeZone="America/Sao_Paulo" />
</p:calendar>
<p:outputLabel for="diasAula" value="#{bundle.diasAula}" />
<p:panel id="diasAula">
<p:selectBooleanCheckbox id="segunda" itemLabel="#{bundle.segunda}" value="#{turmaBean.turma.segunda}" />
<p:selectBooleanCheckbox id="terca" itemLabel="#{bundle.terca}" value="#{turmaBean.turma.terca}" />
<p:selectBooleanCheckbox id="quarta" itemLabel="#{bundle.quarta}" value="#{turmaBean.turma.quarta}" />
<p:selectBooleanCheckbox id="quinta" itemLabel="#{bundle.quinta}" value="#{turmaBean.turma.quinta}" />
<p:selectBooleanCheckbox id="sexta" itemLabel="#{bundle.sexta}" value="#{turmaBean.turma.sexta}" />
<p:selectBooleanCheckbox id="sabado" itemLabel="#{bundle.sabado}" value="#{turmaBean.turma.sabado}" />
</p:panel>
Entity.java
@Column(name="hora_inicio", nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date horaInicio;
@Column(name="hora_fim", nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date horaFim;
@Type(type="true_false")
@Column(name="segunda")
private Boolean segunda;
@Type(type="true_false")
@Column(name="terca")
private Boolean terca;
@Type(type="true_false")
@Column(name="quarta")
private Boolean quarta;
@Type(type="true_false")
@Column(name="quinta")
private Boolean quinta;
@Type(type="true_false")
@Column(name="sexta")
private Boolean sexta;
@Type(type="true_false")
@Column(name="sabado")
private Boolean sabado;
tabela no BD
hora_inicio timestamp NOT NULL,
hora_fim timestamp NULL,
segunda char(1),
terca char(1),
quarta char(1),
quinta char(1),
sexta char(1),
sabado char(1),
O erro era causado devido a annotation que eu estava usando para os atributos horaInicio, horaFim, antes esta como @Temporal(TemporalType.TIME)
De resto ficou tudo certinho, a conversão do valor booleano para char(1)
Abraços.