[Resolvido]Mostrar dados de um relacionamento OneToOne no JSF

Tenho uma tenho um relacionamento OneToOne, para salvar no banco tudo certo, meu problema é mostra no xhtml

Vou mostrar os Beans:

Tenho um usuario

@Entity
public class Usuario implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="userId", unique=true, nullable=false)
	private Integer userId;
	
	@Column(name="ativo")
	private boolean ativo;
	
	@Column(name="userNome")
	private String userNome;
	
	@Column(name="login")
	private String login;
	
	@Column(name="senha")
	private String senha;
	
	@Column(name="email")
	private String email;
	
	@OneToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="equipeId")
    private Equipe equipe;	
	
	@Column(name="permissaoAcesso")
	private int permissaoAcesso;	

Tenho esse relacionamento com Equipe:

@OneToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name="equipeId")
        private Equipe equipe;	

Aqui tem o bean do Equipe:

@Entity
public class Equipe implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="equipeId", unique=true, nullable=false)
	private Integer equipeId;
	
	@Column(name="equipeNome")
	private String equipeNome;
	
	@Column(name="endereco")
	private String endereco;
	
	@Column(name="numero")
	private String numero;
	
	@Column(name="bairro")
	private String bairro;
	
	@Column(name="cidade")
	private String cidade;	
	
	@Column(name="estado")
	private String estado;
	
	@Column(name="nextel")
	private String nextel;
	
	@OneToOne() 
	private Usuario usuario;
	
	@OneToOne() 
	private Ocorrencia ocorrencia;

Assim, eu posso mostrar em um output ou datatable (etc… ) do primefaces os dados do usuário , mas eu não sei como fazer para carregar e mostrar dados da equipe relacionado ao usuário que selecionei na tela no JSF.

Eu entendo que o relacionamento 1 para 1 pode ser:

  • Unidirecional
  • Bidirecional
    Quando é unidirecional, a referência da tabela A está na tabela B. Desta forma, você só consegue achar o registro de A a partir da FK que o referencia em B.
    Quando é bidirecional, você pode achar A buscando por A ou pela FK em B e vice-versa.
    Qual o caso no teu desenvolvimento? Você vai definir…

vai ser unidirecinal

Cada usuário possui uma equipe, isso?

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="equipeId")
private Equipe equipe;

Você tem duas opções: ou coloca o relacionamento com fetch EAGER (e sempre que buscar um usuário trará sua equipe junto) ou, antes de enviar os dados para a view, faz nova busca e encontra a equipe.
Problema na segunda abordagem: como encontrar a equipe sem a referência da mesma (já que o relacionamento é unidirecional)?
Eu acredito que uma equipe é formada por (tem) usuários. E cada usuário está em uma equipe, logo, você está interpretando errado esse relacionamento, ele deveria ser 1 para muitos (um usuário está em uma equipe e cada equipe pode ter 0, 1 ou mais usuarios, não?)

Então usuário pode ou não estar em uma equipe, pois existe mais de 1 nível de usuário, é somente 1 tipo nível de usuário é atrelado a uma equipe , como uma equipe pode ou não estar atrelado a um usuário.

Ainda assim, não vejo como 1 para 1, pois essas distinções de usuários já inibem esse tipo de relacionamento.

Consegui resolver:

Dentro do meu bean Usuario eu instanciei objeto da equipe:

Equipe equipe = new Equipe();

Então no XHTML eu fiz assim no datatable (só mostando a coluna equipe):

<p:dataTable id="usuarioDataTable" var="listausuario"
				value="#{usuarioManageBean.usuarios}"
				rowKey="#{listausuario.userId}"
				emptyMessage="Nenhum registro incluido." paginator="true" rows="10"
				paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">

				<p:column headerText="Equipe"
					style="text-align: center">
					<h:outputText value="#{listausuario.equipe.equipeNome}" />
				</p:column>

</p:dataTable>

Pronto, consigo mostrar qualquer informação da entidade equipe atrelado ao usuário que está salvo.