Herança - Verificar classe com Critéria Hibernate [Resolvido]

3 respostas
robertouba

E ai galera, tenho uma dúvida, tenho uma classe administrador e abaixo dela tenho outra classe que chamo de distribuidor.
Apenas um administrador pode adicionar um outro administrador ou distribuidor, e somente um distribuidor pode listar usuários abaixo dele.

As regras estão aplicadas ao meu sistema e funcionam muito bem, entretanto, estou fazendo um login do usuário, mas preciso saber se ele é administrador ou distribuidor usando hibernate e criteria. Tenho pensado em colocar parametros para sinalizar isso, mas acredito que haja uma melhor maneira de fazer isso, caso contrário eu não precisaria usar herança.

@Entity
public class Administrator {
	@Id
	@GeneratedValue
	private Integer id;
}
@Entity
public class Distributor extends Administrator{
	@Id
	@GeneratedValue
	private Integer id;

	@OneToMany
	@JoinTable(name = "Distributor_Clients")
	private List<User> clients;

	@NotNull
	@NotEmpty
	@ManyToOne
	private Administrator administrator;
}

No meu login não preciso de informações adicionais, apenas preciso saber o tipo que ele é.

Alguém me sugere uma maneira de fazer dessa maneira ou uma maneira melhor?

3 Respostas

robertouba

De acordo com o Daniel Kist [twitter: @danielkist ]


@theroxf Da uma olhada na anotação @Inheritance(strategy = InheritanceType.JOINED). Vai mudar um pouco o modelo, mas deve funcionar.

Segui a o conselho e utilizei

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Administrator {

Mas continuo com o problema, não preciso de dividir as classes, pois estão muito bem em suas tabelas, o que me falta é entender o conceito de objeto e saber pelo login e pelo email qual é o tipo de Objeto ele me traz, se Administrator ou Distributor, utilizando critéria.

dtxk

https://forum.hibernate.org/viewtopic.php?f=1&t=987738&start=0
Nesse link acima estão discutindo sobre isso… acredito que deva ajudar…

robertouba

Bom galera, como eu disse, era apenas conceito.

Eu sei que Distributor é Administrator, mas Administrator não é Distributor.
Portando eu verifico se o Administrator é instancia de Distributor.

public boolean isDistributor() { return this.administrator instanceof Distributor; }

Criado 8 de julho de 2011
Ultima resposta 14 de jul. de 2011
Respostas 3
Participantes 2