Fala, galera !
Sou iniciante no Hibernate + JPA e estou apanhando aqui na seguinte situação: tenho 2 classes, Maquina e Setor. Um Setor possui diversas Maquinas ( relacionamento um para muitos ) e uma Máquina possui apenas 1 Setor ( um para um ). Abaixo estão as classes:
@Entity
public class Maquina
{
@Id
@GeneratedValue
private Long id;
private String nome;
@OneToOne ( cascade = CascadeType.ALL )
private ModeloDeMaquina modelo;
private Long numeroFabricacao;
private Long atip;
private Boolean maquinaAtiva;
private Setor setor;
}
@Entity
public class Setor
{
@Id
@GeneratedValue
private Long id;
private String nome;
@OneToMany ( cascade = CascadeType.ALL )
@IndexColumn( name = "maquinas", base=1)
private Maquina[] maquinas;
}
O problema desta abordagem é que ao consultar uma Maquina para obter o nome do Setor ao qual ela pertence, Setor traz não só o seu nome como também todos seus atributos, incluindo sua relação de máquinas ( inclusive a própria que estamos consultando ). Além de ser desnecessário, acredito que isto implica na performance do programa.
Fiz algumas pesquisas na net e ví que poderia utilizar uma tabela/classe “intermediaria” para unir as informações, conforme o exemplo abaixo:

Aí teria que realizar um INNER JOIN para obter somente o nome do setor de determinada máquina, subtituindo o atributo Setor setor por String setor na classe Maquina, conforme abaixo:
@Entity
public class Maquina
{
@Id
@GeneratedValue
private Long id;
private String nome;
@OneToOne ( cascade = CascadeType.ALL )
private ModeloDeMaquina modelo;
private Long numeroFabricacao;
private Long atip;
private Boolean maquinaAtiva;
private String setor // ALTERAÇÃO AQUI !!
}
Essa abordagem seria correta ? Vcs tem alguma sugestão, galera ?
!