Dúvida modelar classe

8 respostas
tati.mat.moreira

Olá pessoal,

Preciso de uma classe para representar CATEGORIAS, onde posso ter apenas UM nível de SUB-CATEGORIAS.

Por exemplo:
- Aviões (Categoria) -- Avião Monomotor (Sub-categoria) -- Avião Bimotor (Sub-categoria) -- Avião Turbo-hélices (Sub-categoria) -- Aviões a Jato (Sub-categoria) -- Avião Supersônico (Sub-categoria) - Automotores (Categoria) -- Carro (Sub-categoria) -- Moto (Sub-categoria) -- Caminhão (Sub-categoria)
Aqui vai minha tentativa:
@Entity
@Table(name="categoria")
public class Categoria implements Serializable {
	
	private static final long serialVersionUID = -8797314167532565648L;

	@Id  
	@GeneratedValue(strategy=GenerationType.IDENTITY)	
	private Long id; 
	
	@Column(name="nome", nullable=false)
	private String nome;
	
	@Column(name="descricao", nullable=false)
	private String descricao;
	
	@ManyToOne
	@JoinColumn(name="subcategoria")
	private Categoria subcategoria;
...
Gradissída!

8 Respostas

foxpv

oi…
bom primeiramente, está acontecendo algum erro qdo vc utiliza essa classe? qual seria sua dúvida? explica melhor aí…

Abraço

fernei

Ja tentou:

E como o foxpv, qual o problema???

Ou vc so está interessada em como ficaria a implementação deste seu modelo?!?!?1

Explica melhor por favor.

tati.mat.moreira

Oi,

minha dúvida é se a linha @ManyToOne @JoinColumn(name="subcategoria") private Categoria subcategoria; faz isso que eu mostrei nos exemplos.

Obrigada!

D

Penso que sua implementação está correta sim. Você criou um auto-relacionamento de categoria com categoria.

Não vejo nenhum problema nessa abordagem.

tati.mat.moreira

Com a linha: @ManyToOne @JoinColumn(name="subcategoria") private Categoria subcategoria;

eu terei só UM nível de categoria?

fernei

Ao meu ver sim.

Vc pode ter e uma list com várias sub-Categorias caso seja necessário.

Marky.Vasconcelos

com o que voce fez voce vai ter uma sub-categoria para cada categoria…

a solução é guardar a referencia para a categoria “pai” e para buscar usar esta como criteria.

@ManyToOne
@JoinColumn(name="categoria")
private Categoria categoriaReal;

E em um select para escolher todas as sub-categorias de uma categoria voce poderia fazer assim

Criteria crit = session.createCriteria(Categoria.class);
crit.add(new Restrictions("categoriaReal", oObjetoDaCategoriaRealAviao);
List<Categoria> subAvioes = crit.list();
D

tati.mat.moreira:
Com a linha: @ManyToOne @JoinColumn(name="subcategoria") private Categoria subcategoria;

eu terei só UM nível de categoria?

Agora eu entendi o que você quer. Bem… dessa forma não. Você não vai limitar a um nível de subcategoria. Acredito que a nível de modelo para você fazer essa limitação, somente usando duas tabelas distintas: uma para Categoria e outra para Subcategoria.

Espero ter ajudado. Até.

Criado 8 de janeiro de 2009
Ultima resposta 9 de jan. de 2009
Respostas 8
Participantes 5