Join com hibernate

Tenho as seguintes tabelas:

machine_id
id, game, mac_adress, math_rules e is_locked

games
id, title

Para pegar todas as machines usei:

manager.createQuery("Select p from " + Machine.class.getName() + " p", Machine.class).getResultList();

Então os games vieram com os devidos códigos, mas eu gostaria que, ao fazer um machine.getGame, viesse o nome do game. Tem como o select ja vir relacionado com o game da tabela games?

E como ficaria isso em meus models? Este é o meu model Machine. Não fiz o game, pois acho que terei que relacionar os 2 para fazer esse join.

@Entity
@Table(name = "machine_id")
public class Machine {
	
	@Id
	private int id;
	
	private int game;
	
	@Column(name = "mac_address")
	private String macAddress;
	
	@Column(name = "math_rules")
	private int mathRules;
	
	@Column(name = "is_locked")
	private int isLocked;

Basta mapear o relacionamento na classe Machine, assim:

@ManyToOne
@JoinColumn(name = "game", referencedColumnName = "id")
private Game game;

Com isso, você conseguirá recuperar o nome assim:

machine.getGame().getTitle();
1 curtida

Machine

@Entity
@Table(name = "machine_id")
public class Machine {
	@Id
	private int id;
	@JoinColumn(name = "game", referencedColumnName = "id")
	private Game game;
	@Column(name = "mac_address")
	private String macAddress;
	@Column(name = "math_rules")
	private int mathRules;
	@Column(name = "is_locked")
	private int isLocked;

Game

@Entity
@Table(name = "games")
public class Game {
	@Id
	private int id;
	private String title;

é só isso? como a classe machine tem esse link com a games?

erro

org.hibernate.MappingException: Could not determine type for: com.ambra.report.models.Game, at table: machine_id, for columns: [org.hibernate.mapping.Column(game)]

estou fazendo assim na jsp

							<tr>
								<td><input type="checkbox" id="${machine.id }" class="filled-in"
									value="${machine.id }" name="machineId[]" /> <label for="${machine.id }"></label></td>
								<td><a>${machine.id }</a></td>
								<td>Game</td>```

no game uso o getGame?

```<td><a>${machine.getGame().title }</a></td>``` ?

Faltou o @ManyToOne no atributo game na classe Machine.

agora parece que foi, mas da erro na jsp. Como da pra acessar?

${machine.game.title}

desse jeito aparece esse erro.


javax.el.PropertyNotFoundException: Property 'game' not found on type com.ambra.report.models.Machine```

Você criou o get e set do atributo game na classe Machine?

agora deu certinho!
obrigado pelo help. Não sabia que o hiber navegava por getters e setters.

vlw!

estou com outra duvida, mas vou abrir em outro topico. Melhor separar

1 curtida