Enum retorna null qdo usado em relacionamento

bom dia,

estava usando enum e não estava tendo problema algum até que
precisei fazer um relacionameto @OneToOne por exemplo e agora meu enum está retornando null

Classe address

   [code]@OneToOne(mappedBy="address")
@JoinColumn(name="PERSON_ID")
private Person person;

@Enumerated(EnumType.STRING)
@Column(name="Country")
private Country country;[/code]

classe Person

@OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.LAZY, orphanRemoval=true) private Address address;

e para carregar o enum estava fazendo dentro MB

public Country[] getCountryValues() { return Country.values(); }

Como eu disse esta funcionando, mas ao precisar usar um enum em uma classe que está fazendo relacionamento
ele me retorna null

Segue abaixo o erro

Target Unreachable, 'null' returned null at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100) at org.primefaces.renderkit.InputRenderer.findImplicitConverter(InputRenderer.java:170) at org.primefaces.renderkit.InputRenderer.getOptionAsString(InputRenderer.java:156)

Então pesquisando achei para criar um enum converter generico, mas não resolveu

Classe Enum Converter

[code]public class EnumConverter implements Converter{

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public Object getAsObject(FacesContext context, UIComponent component,String value) {
	Class enumType = component.getValueExpression("value").getType(context.getELContext());
	return Enum.valueOf(enumType, value);
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
	if (object == null){
		return null;
	}
	Enum<?> type = (Enum<?>) object;
	return type.toString();
}

}[/code]

Alguém sabe como resolver isso

Att

Abri o tópico no forum errado, foi mal…
pode mover ele para desenvolvimento web

Você esta tentando acessar desta forma: person.address.country? Eu acho que quem esta vindo nulll é o address,
não estaria faltando um @JoinColumn ou @PrimaryKeyJoinColumn?

@OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.LAZY, orphanRemoval=true)  
@JoinColumn(...)
private Address address;

vc diz colocar @JoinColumn(ADDRESS_ID) ?

[quote=fbl.lucas]Você esta tentando acessar desta forma: person.address.country? Eu acho que quem esta vindo nulll é o address,
não estaria faltando um @JoinColumn ou @PrimaryKeyJoinColumn?

@OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.LAZY, orphanRemoval=true) @JoinColumn(...) private Address address; [/quote]

[quote=tmvolpato]vc diz colocar @JoinColumn(ADDRESS_ID) ?

[quote=fbl.lucas]Você esta tentando acessar desta forma: person.address.country? Eu acho que quem esta vindo nulll é o address,
não estaria faltando um @JoinColumn ou @PrimaryKeyJoinColumn?

@OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.LAZY, orphanRemoval=true) @JoinColumn(...) private Address address; [/quote][/quote]

Exatamente, no seu código ja existe esta anotação? A chave primária de Person é a mesma de Address? Se for a mesma você deve usar o @PrimaryKeyJoinColumn

lá na classe Address
eu tenho isso

@OneToOne @JoinColumn(PERSON_ID) private Person person:

A chave primaria não é a mesma

então na classe Person

eu faria isso

@OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.LAZY, orphanRemoval=true) @PrimaryKeyJoinColumn private Address address;

certo?

[quote=fbl.lucas][quote=tmvolpato]vc diz colocar @JoinColumn(ADDRESS_ID) ?

[quote=fbl.lucas]Você esta tentando acessar desta forma: person.address.country? Eu acho que quem esta vindo nulll é o address,
não estaria faltando um @JoinColumn ou @PrimaryKeyJoinColumn?

@OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.LAZY, orphanRemoval=true) @JoinColumn(...) private Address address; [/quote][/quote]

Exatamente, no seu código ja existe esta anotação? A chave primária de Person é a mesma de Address? Se for a mesma você deve usar o @PrimaryKeyJoinColumn[/quote]

Tenta desta forma:
Address

@OneToOne  
@JoinColumn(name="PERSON_ID", nullable = false)  
private Person person;  

Person

@OneToOne(cascade=CascadeType.ALL, mappedBy="person")  
private Address address;  

Ainda continua retornando null

[quote=fbl.lucas]Tenta desta forma:
Address

@OneToOne  
@JoinColumn(name="PERSON_ID", nullable = false)  
private Person person;  

Person

@OneToOne(cascade=CascadeType.ALL, mappedBy="person") private Address address; [/quote]

acho que eu vou ter que criar um converter para esse enum

Grave: Error Rendering View[/hr/employee/add-employee.xhtml] javax.el.PropertyNotFoundException: /hr/employee/add-employee.xhtml @302,24 value="#{employeeFace.selectBean.address.country.country}": Target Unreachable, 'null' returned null at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100) at org.primefaces.renderkit.InputRenderer.findImplicitConverter(InputRenderer.java:170) at org.primefaces.renderkit.InputRenderer.getOptionAsString(InputRenderer.java:156)

mão parece ser relacionamento

[quote=tmvolpato]acho que eu vou ter que criar um converter para esse enum

Grave: Error Rendering View[/hr/employee/add-employee.xhtml] javax.el.PropertyNotFoundException: /hr/employee/add-employee.xhtml @302,24 value="#{employeeFace.selectBean.address.country.country}": Target Unreachable, 'null' returned null at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100) at org.primefaces.renderkit.InputRenderer.findImplicitConverter(InputRenderer.java:170) at org.primefaces.renderkit.InputRenderer.getOptionAsString(InputRenderer.java:156)

mão parece ser relacionamento[/quote]

coloca um h:outputText ai para ver quem ta null, se é address ou country

Segue meu selectOneMenu

<h:outputLabel for="country" value="#{msg.label_country}: *" /> <p:selectOneMenu id="country" label="#{msg.label_country}" value="#{employeeFace.selectBean.address.country.country}" required="true"> <f:selectItem itemValue="#{null}" itemLabel="#{msg.select_initialState}" /> <f:selectItems value="#{employeeFace.countryValues}"/> <p:ajax event="change" listener="#{employeeFace.actionLoadStates}" update="cityName,state,foreignCityLabel, foreignCityInput" /> </p:selectOneMenu>

e tbm já tentei itemValue e o itemLabel

<h:outputLabel for="country" value="#{msg.label_country}: *" /> <p:selectOneMenu id="country" label="#{msg.label_country}" value="#{employeeFace.selectBean.address.country}" required="true"> <f:selectItem itemValue="#{null}" itemLabel="#{msg.select_initialState}" /> <f:selectItems value="#{employeeFace.countryValues}" var="co" itemValue="#{co}" itemLabel="#{co.country}" /> </p:selectOneMenu>

o erro continua

e não relacionamento
já comparei meu relacionamento com vários e não tem nada fora do normal

to achando que tem haver com a classe Person que recebe Address (Person é onde começa minha herança(joined))

segue o erro que continua dando

javax.el.PropertyNotFoundException: /hr/employee/add-employee.xhtml @301,75 value="#{employeeFace.selectBean.address.country}": Target Unreachable, 'null' returned null at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100) at org.primefaces.renderkit.InputRenderer.findImplicitConverter(InputRenderer.java:170) at org.primefaces.renderkit.InputRenderer.getOptionAsString(InputRenderer.java:156)