How can I select only a few fields from a related object?
How it works (catching everything):
List<Participante> participantes = this.entityManager.createQuery("SELECT a "
+ " FROM Participante a WHERE a.pessoa_id = :pessoa "
+ "AND a.motivo_id = :motivo")
.setParameter("pessoa", pessoa).setParameter("motivo", motivo).getResultList();
As I've tried:
List<Participante> participantes = this.entityManager.createQuery("SELECT "
+ "new Evento(a.evento_id.id, a.evento_id.nome, "
+ "new Pessoa(a.evento_id.criador_id.id, a.evento_id.criador_id.nome)) "
+ " FROM Participante a WHERE a.pessoa_id = :pessoa "
+ "AND a.motivo_id = :motivo")
.setParameter("pessoa", pessoa).setParameter("motivo", motivo).getResultList();
With the constructor there is no error, without constructor it gives me error that the object could not be mapped.
How do I transform my Participants into Objects (the 1 shown works):
public List<Evento> pegaEventos(List<Participante> participantes) {
List<Evento> eventos = new ArrayList<Evento>();
try {
for(Participante participante : participantes) {
System.err.println("Evento ID: " + participante.getEvento_id().getId());
eventos.add(participante.getEvento_id());
}
return eventos;
} catch (Exception e) {
System.err.println(junges.getFullStackTrace(e));
return null;
}
}
Event Template:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="nome")
private String nome;
@Column(name="descricao")
private String descricao;
@Column(name="preco")
private double preco;
@Column(name="idade")
private int idade;
@Column(name="minpessoas")
private int minpessoas;
@Column(name="maxpessoas")
private int maxpessoas;
@Column(name="dtinicio")
private Timestamp inicio;
@Column(name="dtfim")
private Timestamp fim;
@Column(name="criacao")
private Timestamp criacao;
@ManyToOne
@JoinColumn(name="categoria")
private Categoria categoria;
@Column(name="endereco")
private String endereco;
@ManyToOne
@JoinColumn(name="criador_id")
private Pessoa criador_id;
@Column(name="desativado")
private boolean desativado;
Person Template:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="nome")
private String nome;
@Column(name="sobrenome")
private String sobrenome;
@Column(name="email")
private String email;
@Column(name="senha")
private String senha;
@Column(name="telefone")
private String telefone;
@Column(name="endereco")
private String endereco;
@ManyToOne
@JoinColumn(name="localizacao")
private Localizacao localizacao;
@Column(name="login")
private Timestamp login;
@Column(name="registro")
private Timestamp registro;
@Column(name="aniversario")
private Timestamp aniversario;
@Column(name="isAdm")
private int isAdm;
@Column(name="desativado")
private boolean desativado;
private double nota;