Hi Jean. I’ve see your test project, and I dont see any differences on your code :(.
Im using your container with success, but, Im adding manually the properties.
Here is a working example:
Entity:
package br.com.simus.supera.ciclonev2.persistence.jobs;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import br.com.simus.supera.ciclonev2.persistence.DefaultEntity;
@Entity
@Table(name="t010_jobs")
@SequenceGenerator(name="t010_jobs_t010_job_iu_seq", sequenceName="t010_jobs_t010_job_iu_seq", allocationSize=1, initialValue=1)
public class Job extends DefaultEntity<Long>{
/**
*
*/
private static final long serialVersionUID = 3661148088304105164L;
@Id
@Column(name="t010_job_iu")
@GeneratedValue(generator="t010_jobs_t010_job_iu_seq", strategy=GenerationType.AUTO)
private Long id;
@Column(name="t010_job_name", nullable=false)
private String jobName;
@Column(name="t010_job_class", nullable=false)
private String jobClass;
@Column(name="t010_data_inicio", nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date dataInicio;
@Column(name="t010_data_termino")
@Temporal(TemporalType.TIMESTAMP)
private Date dataTermino;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private TriggerSegundos triggerSegundos;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private TriggerMinutos triggerMinutos;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private TriggerHoras triggerHoras;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private TriggerDiaria triggerDiaria;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private TriggerSemanal triggerSemanal;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private TriggerMensal triggerMensal;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private TriggerCron triggerCron;
// Tarefas
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private JobSentencaSQL jobSentencaSql;
// Actions
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="job", fetch=FetchType.LAZY)
private ActionEmail actionEmail;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public String getJobClass() {
return jobClass;
}
public void setJobClass(String jobClass) {
this.jobClass = jobClass;
}
public Date getDataInicio() {
return dataInicio;
}
public void setDataInicio(Date dataInicio) {
this.dataInicio = dataInicio;
}
public Date getDataTermino() {
return dataTermino;
}
public void setDataTermino(Date dataTermino) {
this.dataTermino = dataTermino;
}
public TriggerSegundos getTriggerSegundos() {
return triggerSegundos;
}
public void setTriggerSegundos(TriggerSegundos triggerSegundos) {
this.triggerSegundos = triggerSegundos;
}
public TriggerMinutos getTriggerMinutos() {
return triggerMinutos;
}
public void setTriggerMinutos(TriggerMinutos triggerMinutos) {
this.triggerMinutos = triggerMinutos;
}
public TriggerHoras getTriggerHoras() {
return triggerHoras;
}
public void setTriggerHoras(TriggerHoras triggerHoras) {
this.triggerHoras = triggerHoras;
}
public TriggerDiaria getTriggerDiaria() {
return triggerDiaria;
}
public void setTriggerDiaria(TriggerDiaria triggerDiaria) {
this.triggerDiaria = triggerDiaria;
}
public TriggerSemanal getTriggerSemanal() {
return triggerSemanal;
}
public void setTriggerSemanal(TriggerSemanal triggerSemanal) {
this.triggerSemanal = triggerSemanal;
}
public TriggerMensal getTriggerMensal() {
return triggerMensal;
}
public void setTriggerMensal(TriggerMensal triggerMensal) {
this.triggerMensal = triggerMensal;
}
public TriggerCron getTriggerCron() {
return triggerCron;
}
public void setTriggerCron(TriggerCron triggerCron) {
this.triggerCron = triggerCron;
}
public ActionEmail getActionEmail() {
return actionEmail;
}
public void setActionEmail(ActionEmail actionEmail) {
this.actionEmail = actionEmail;
}
public JobSentencaSQL getJobSentencaSql() {
return jobSentencaSql;
}
public void setJobSentencaSql(JobSentencaSQL jobSentencaSql) {
this.jobSentencaSql = jobSentencaSql;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!super.equals(obj)) {
return false;
}
if (!(obj instanceof Job)) {
return false;
}
Job other = (Job) obj;
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
return true;
}
}
MetaModel:
package br.com.simus.supera.ciclonev2.persistence.jobs;
import java.util.Date;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@StaticMetamodel(Job.class)
public abstract class Job_ {
public static volatile SingularAttribute<Job, Date> dataTermino;
public static volatile SingularAttribute<Job, TriggerMinutos> triggerMinutos;
public static volatile SingularAttribute<Job, TriggerHoras> triggerHoras;
public static volatile SingularAttribute<Job, String> jobName;
public static volatile SingularAttribute<Job, TriggerDiaria> triggerDiaria;
public static volatile SingularAttribute<Job, String> jobClass;
public static volatile SingularAttribute<Job, TriggerSegundos> triggerSegundos;
public static volatile SingularAttribute<Job, Long> id;
public static volatile SingularAttribute<Job, Date> dataInicio;
public static volatile SingularAttribute<Job, TriggerCron> triggerCron;
public static volatile SingularAttribute<Job, ActionEmail> actionEmail;
public static volatile SingularAttribute<Job, JobSentencaSQL> jobSentencaSql;
public static volatile SingularAttribute<Job, TriggerSemanal> triggerSemanal;
public static volatile SingularAttribute<Job, TriggerMensal> triggerMensal;
}
Code using the Container:
@Override
public Container loadGridContainer() {
JobController controller = new JobController();
CriteriaQueryDefinition<Job> cd = new CriteriaQueryDefinition<Job>(controller.getDaoEntityManger(), true, 50, Job.class);
CriteriaContainer<Job> container = new CriteriaContainer<Job>(cd);
container.addContainerProperty("jobName", String.class, null, false, true);
container.addContainerProperty("dataInicio", Date.class, null, false, true);
container.addContainerProperty("dataTermino", Date.class, null, false, true);
return container;
}
@Override
protected void gridPosConfig() {
getGrid().addGeneratedColumn("jobEstado", new JobEstadoGenerator());
getGrid().addGeneratedColumn("dataInicio", new ColumnGenerators.DateColumnGenerator());
getGrid().addGeneratedColumn("dataTermino", new ColumnGenerators.DateColumnGenerator());
getGrid().addGeneratedColumn("ultimaExecucao", new jobUltimaExecucao());
getGrid().addGeneratedColumn("proximaExecucao", new jobProximaExecucao());
getGrid().setColumnHeader("jobName", "Tarefa");
getGrid().setColumnHeader("jobEstado", "Estado da Tafera");
getGrid().setColumnHeader("dataInicio", "Início da Tarefa");
getGrid().setColumnHeader("dataTermino", "Fim da Tarefa");
getGrid().setColumnHeader("ultimaExecucao", "Última execução");
getGrid().setColumnHeader("proximaExecucao", "Próxima execução");
getGrid().setVisibleColumns(new String[] {"jobName", "jobEstado", "dataInicio", "dataTermino", "ultimaExecucao", "proximaExecucao"});
configureGridContextMenu();
}
This code is working, but I need to add the Container Properties.
The metamodel definition is in the same package as the Entity. Only the compiled metamodel is present.
This is a test code, trying to read the property names, base on the metamodel:
Set<SingularAttribute<? super Job, ?>> attrs = controller.getDaoEntityManger().getMetamodel().entity(Job.class).getSingularAttributes();
Iterator<SingularAttribute<? super Job, ?>> i = attrs.iterator();
while(i.hasNext()) {
System.out.println(i.next().getName());
}
Output:
triggerHoras
triggerDiaria
triggerCron
actionEmail
triggerSemanal
triggerMinutos
triggerMensal
jobName
jobSentencaSql
dataTermino
triggerSegundos
dataInicio
id
jobClass
Something is wrong in this model? There any additional configuration for the container locate the MetaModel definition?
Many thanks!