[RESOLVIDO] Hibernate Chave Estrangeria - Exception unknow MappedBy

Pessoal, estou aprendendo a utilizar hibernate, comecei faz 2 dias, estou tentando fazer relacionamento com chave estrangeira e estou recebendo a seguinte exception:

Ainda não entendi muito bem o conceito desse relacionamento no hibernate, queria simplesmente que um id de uma tabela fosse chave estrangeira de outra tabela, mas parece que com hibernate não da pra fazer “só” isso, tem que associar o objeto inteiro, não sei se estou falando bobagem, o mais longe que consegui chegar foi isso:

@Entity
public class User {
       @Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id_user;
	private String username;
	private String password;
	@OneToOne(cascade = CascadeType.ALL, mappedBy="user")
	@ForeignKey( name="id_user", inverseName="id_user" )
	private Perfil perfil;
 
       //Getters em settsrs
}
@Entity
@Table(name="perfil")
public class Perfil {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id_perfil;
	@OneToOne(cascade = CascadeType.ALL, mappedBy="perfil")
	@ForeignKey( name="id_user", inverseName="id_user" )
	private User user;
        //getters and settrs
}

Alguém pode me dar um help?

[quote=LVentura]Pessoal, estou aprendendo a utilizar hibernate, comecei faz 2 dias, estou tentando fazer relacionamento com chave estrangeira e estou recebendo a seguinte exception:
[/quote]
Começou faz dois dias e quer fazer um relacionamento com chave estrangeira?

Isso é causado por duas coisas:
1 - Você não entende de OO.
2 - Você não leu a documentação do Hibernate.

[quote=LVentura]

@Entity
public class User {
       @Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id_user;
	private String username;
	private String password;
	@OneToOne(cascade = CascadeType.ALL, mappedBy="user")
	@ForeignKey( name="id_user", inverseName="id_user" )
	private Perfil perfil;
 
       //Getters em settsrs
}
@Entity
@Table(name="perfil")
public class Perfil {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id_perfil;
	@OneToOne(cascade = CascadeType.ALL, mappedBy="perfil")
	@ForeignKey( name="id_user", inverseName="id_user" )
	private User user;
        //getters and settrs
}

Alguém pode me dar um help?[/quote]
Em OO não existe relacionamento por chaves. Isso é algo inerente à programação estruturada. Se você vai forçar a barra e tentar usar isso, estará fazendo um serviço porco.
Sem conhecer OO é impossível usar o hibernate. Você precisa ter bem claro os conceitos de composição, agregação, herança, implementação, encapsulamento e etc.
Isso não significa que você deve esquecer tudo o que sabe sobre SQL, pelo contrário, você precisa saber muito para quando precisar fazer selects mais complexos, como subqueries e joins ou mesmo usar funções.

[quote=drsmachado][quote=LVentura]Pessoal, estou aprendendo a utilizar hibernate, comecei faz 2 dias, estou tentando fazer relacionamento com chave estrangeira e estou recebendo a seguinte exception:
[/quote]
Começou faz dois dias e quer fazer um relacionamento com chave estrangeira?

Isso é causado por duas coisas:
1 - Você não entende de OO.
2 - Você não leu a documentação do Hibernate.

[quote=LVentura]

@Entity
public class User {
       @Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id_user;
	private String username;
	private String password;
	@OneToOne(cascade = CascadeType.ALL, mappedBy="user")
	@ForeignKey( name="id_user", inverseName="id_user" )
	private Perfil perfil;
 
       //Getters em settsrs
}
@Entity
@Table(name="perfil")
public class Perfil {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id_perfil;
	@OneToOne(cascade = CascadeType.ALL, mappedBy="perfil")
	@ForeignKey( name="id_user", inverseName="id_user" )
	private User user;
        //getters and settrs
}

Alguém pode me dar um help?[/quote]
Em OO não existe relacionamento por chaves. Isso é algo inerente à programação estruturada. Se você vai forçar a barra e tentar usar isso, estará fazendo um serviço porco.
Sem conhecer OO é impossível usar o hibernate. Você precisa ter bem claro os conceitos de composição, agregação, herança, implementação, encapsulamento e etc.
Isso não significa que você deve esquecer tudo o que sabe sobre SQL, pelo contrário, você precisa saber muito para quando precisar fazer selects mais complexos, como subqueries e joins ou mesmo usar funções.[/quote]

Falou falou, e não me ajudou.

Enfim, já consegui sozinho

Obrigado!

Segue o relacionamento:

@Entity
@Table(name = "perfil")
public class Perfil {

	public Perfil(){
		
	}
	
	public Perfil(User user){
		this.user = user;
	}
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id_perfil;
	@OneToOne(cascade={CascadeType.ALL}, orphanRemoval=true, fetch = FetchType.LAZY)
	@JoinColumn(name = "id_user", nullable = false)
	@ForeignKey(name = "FK_PERFIL_ID")
	private User user;
	private String nomeuser;

	@Entity
public class User {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id_user;
	private String username;
	private String password;

LVentura ele quis dizer que em java é diferente o conceito e que deveria dar uma olhada melhor em composição… que talvez pudesse te ajudar…

Pq na linguegem estruturada vc precisa fazer esse relacionamento, enquanto em OO não…

Mas concordo com vc… não ajudou em nada… rs…

Mas aqui no fórum existe gente só pra reclamar que vc não pesquisou e ajudar que é bom nada…

(acho que não foi o caso do drsmachado, acho que ele só se expressou mal… rs…)

Abraços e coloque [RESOLVIDO] na frente do título… vlw…

[quote=diogogama]LVentura ele quis dizer que em java é diferente o conceito e que deveria dar uma olhada melhor em composição… que talvez pudesse te ajudar…

Pq na linguegem estruturada vc precisa fazer esse relacionamento, enquanto em OO não…

Mas concordo com vc… não ajudou em nada… rs…

Mas aqui no fórum existe gente só pra reclamar que vc não pesquisou e ajudar que é bom nada…

(acho que não foi o caso do drsmachado, acho que ele só se expressou mal… rs…)

Abraços e coloque [RESOLVIDO] na frente do título… vlw…[/quote]
Não, não me expressei mal. Tudo o que eu disse foi com total clareza e é o que está escrito ali.
O sujeito é preguiçoso. Pegou um exemplo na internet e pensou “sou foda, sei usar hibernate” e então se deparou com um pequeno problema que seria facilmente resolvido se o mesmo soubesse que em orientação a objetos não se usa PK ou FK. Um objeto possui ou é composto por outro(s) objeto(s) e não por uma chave dele. Você tem uma conta no banco, não um número que identifica essa conta, é parecido, mas não igual.

Outro ponto que mostra que o sujeito que abriu o tópico demonstra ser preguiçoso por não ter pego a mensagem do erro e pesquisado no google ou traduzido a mesma.
Se o erro diz ‘referenced property unknown’ eu parto deste ponto para tentar achar a falha. É óbvio que o erro está no ‘mappedBy’ que aponta para um atributo que não existe.

Quanto a reclamar que não pesquisou, está nas regras do fórum e no how to, pesquise antes de perguntar, cite fontes, mostre onde está tendo dificuldades, seja claro, objetivo e direto. Eu acrescentaria a estes pontos um ‘releia e refaça passo a passo o que fez’. Quase sempre os problemas são causados por desatenção, pelo ‘ctrl + C/ctrl + V’ e nem percebemos.
E a maioria dos que criam tópicos desnecessários, como este (desnecessário pois com um pouco de pesquisa e atenção seria resolvido), não fazem nenhuma das coisas que citei.

[quote=drsmachado][quote=diogogama]LVentura ele quis dizer que em java é diferente o conceito e que deveria dar uma olhada melhor em composição… que talvez pudesse te ajudar…

Pq na linguegem estruturada vc precisa fazer esse relacionamento, enquanto em OO não…

Mas concordo com vc… não ajudou em nada… rs…

Mas aqui no fórum existe gente só pra reclamar que vc não pesquisou e ajudar que é bom nada…

(acho que não foi o caso do drsmachado, acho que ele só se expressou mal… rs…)

Abraços e coloque [RESOLVIDO] na frente do título… vlw…[/quote]
Não, não me expressei mal. Tudo o que eu disse foi com total clareza e é o que está escrito ali.
O sujeito é preguiçoso. Pegou um exemplo na internet e pensou “sou foda, sei usar hibernate” e então se deparou com um pequeno problema que seria facilmente resolvido se o mesmo soubesse que em orientação a objetos não se usa PK ou FK. Um objeto possui ou é composto por outro(s) objeto(s) e não por uma chave dele. Você tem uma conta no banco, não um número que identifica essa conta, é parecido, mas não igual.

Outro ponto que mostra que o sujeito que abriu o tópico demonstra ser preguiçoso por não ter pego a mensagem do erro e pesquisado no google ou traduzido a mesma.
Se o erro diz ‘referenced property unknown’ eu parto deste ponto para tentar achar a falha. É óbvio que o erro está no ‘mappedBy’ que aponta para um atributo que não existe.

Quanto a reclamar que não pesquisou, está nas regras do fórum e no how to, pesquise antes de perguntar, cite fontes, mostre onde está tendo dificuldades, seja claro, objetivo e direto. Eu acrescentaria a estes pontos um ‘releia e refaça passo a passo o que fez’. Quase sempre os problemas são causados por desatenção, pelo ‘ctrl + C/ctrl + V’ e nem percebemos.
E a maioria dos que criam tópicos desnecessários, como este (desnecessário pois com um pouco de pesquisa e atenção seria resolvido), não fazem nenhuma das coisas que citei.[/quote]

Olá, eu li que o problema é do mappedBy porém não fazia a menor ideia do que mappedBy serviria, se eu não tivesse pesquisado não teria chego naquele exemplo e em nenhum momento disse que sou foda no Hibernate, vim aqui no forum pedir auxilio, para APRENDER, e não pra resolver meu problema, já que acredito que este seja o objetivo do forum aprender, se eu me equivoquei em criar os relacionamentos quem estivesse com vontade de ajudar me diria o que errei e o que preciso entender para aprender a utilizar ou me mostrar um caminho para seguir, sou tão preguiçoso que consegui aprender e fazer sozinho, sem ajuda de ninguém.

Entendo que você tenha ódio das pessoas que utilizam CTRL C + CTRL V, e são preguiçosos a ponto de largar a pergunta no GUJ e deixar que alguém responda ja que assim seria mais fácil do que pesquisar, porém você deve ter mais atenção ao filtrar estes usuários, porque sem dúvidas não sou um deles.

Tópico resolvido

Att,