[Resolvido] Problema @OneToMany da propria tabela

4 respostas
S

Olá pessoal, já procurei o que pode ser, mas não encontrei uma solução.

Tenho uma entidade de Usuarios, e dentro desta preciso de um @OneToMany de Usuarios, que são os filhos dele. //que esta dando erro

O relacionamento é feito atraves do “código do usuario” com o “cod do superior dele”.

Explicando: Tenho um Usuario, e ele é superior de outros usuarios, e preciso dessa lista de subordinados.

Código:

@Entity
@Table(name = "usuarios", uniqueConstraints = { @UniqueConstraint(columnNames = { "cod_estabelecimento", "cdn_funcionario"}) })
@Cache(usage = CacheConcurrencyStrategy.NONE)
public class Usuarios implements Serializable {

	private static final long serialVersionUID = -9104628676001725524L;

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USUARIOS_OID")
	@SequenceGenerator(name = "USUARIOS_OID", sequenceName = "oid_usuarios", allocationSize = 1)
	@Column(name = "OID")
	private Integer OID;

	@Column(name = "cod_estabelecimento", length = 3, nullable = false)
	private String cod_estabelecimento;

	@Column(name = "cdn_funcionario", nullable = false)
	private Integer cdn_funcionario;

	@Column(name = "nom_funcionario", length = 100, nullable = false)
	private String nom_funcionario;

	@Column(name = "cod_superior")
	private Integer cod_superior;

	@Cache(usage = CacheConcurrencyStrategy.NONE)
	@OneToMany(cascade = { CascadeType.REMOVE }, fetch = FetchType.EAGER, targetEntity = Usuarios.class)
	@NotFound(action = NotFoundAction.IGNORE)
	@JoinColumns( {
	        @JoinColumn(name = "cod_estabelecimento", referencedColumnName = "cod_estabelecimento", insertable = false, updatable = false),
	        @JoinColumn(name = "cdn_funcionario", referencedColumnName = "cod_superior", insertable = false, updatable = false) })
	private Set<Usuarios> children;

	//...get and set...
}

O Erro:

<blockquote>	Exception in thread “main” javax.persistence.PersistenceException: org.hibernate.HibernateException: collection is not associated with any session

at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629)

at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:73)</blockquote>

Alguém tem alguma dica se isso pode fazer?

Muito Obrigado.

4 Respostas

skull

cara tenta o seguinte

muda de:

@Column(name = cod_superior)

private Integer cod_superior;
para

@Column(name = cod_superior)

private Usuarios superior;

e para pegar os children
tu pode fazer um @TRANSIENTE
e montar a query ali dentro

@transient

getChildren()

{

Select * from usuario where <a href="http://superior.id">superior.id</a> = …

}

dica, caso nao tenha outar solucao

S

muito obrigado skull, mas nao funcionou :frowning:

na verade estou utilizando AdobleFlex+Java com BlazeDS,

e quando vai do java para o Flex, o childrem vai NULL.

skull

@OneToMany(cascade = { CascadeType.REMOVE }, fetch = FetchType.EAGER, targetEntity = Usuarios.class, mappedBy =“superior”)
private Set children;

e assim?

S

:smiley: :smiley: :smiley: vlw skull…

Funcionou!!!

Muito Obrigado.

Criado 7 de dezembro de 2010
Ultima resposta 7 de dez. de 2010
Respostas 4
Participantes 2