Problema Hibernate OneToOne

O seguinte erro esta ocorrendo

[code]import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = “cbo”)
public class Cbo {
@Id
@GeneratedValue
@Column(name = “cbo_codigo”, nullable = false)
private int cboCodigo;
@Column(name = “cbo_funcao”, length = 255)
private String funcao;
@Column(name = “num_vagas”, length = 2)
private int numVagas;

public Cbo(int cbCodigo, String funcao, int numVagas) {
	super();
	this.cboCodigo = cbCodigo;
	this.funcao = funcao;
	this.numVagas = numVagas;
}

//Getters Setters

import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = “Ocupacao”)
public class Ocupacao {
@Id
@GeneratedValue
private int ocu_codigo;
@Column(name = “ocu_ultimo_emprego”, length = 256)
private String ultimoEmprego;
@Column(name = “ocu_observacao”, length = 256)
private String observacao;
@Column(name = “ocu_situacao”, length = 2)
private boolean situacao;
@Column(name = “ocu_data_situacao”)
private Date dataSituacao;

@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "cbo_codigo", nullable = false)
private Cbo cbo;

o Erro

Exception in thread “main” java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1868)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:768)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:687)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3435)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3389)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1341)
at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:931)[/code]

Ja procurei varios exemplos e realmente nao estou conseguindo saber aonde estao o erro se alguem com experiencia em hibernate puder me ajudar fico grato.

Vc tem certeza que o erro esta entre essas classes?
Pq o erro fala sobre uma ligação OneToMany e não sobre uma OneToOne.

@OneToOne(cascade = { CascadeType.ALL }) @JoinColumn(name = "cbo_codigo", nullable = false) private Cbo cbo;

Será que essa classe Cbo está @OneToMany?

Pelo q eu vi não encontrei nenhum erro. Tipo da uma olhada no resto do seu codigo e ve se não tem nada de errado nele, pq o hibernate confere tudo antes de inicia, e se tive alguma coisa errada ele para.
Isso ja aconteceu muitas vezes comigo, dele aponta algum erro em outro lugar.

Desculpa o erro correto é esse :

Exception in thread "main" java.lang.NoSuchMethodError: javax.persistence.OneToOne.orphanRemoval()Z at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1616) at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:768) at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:687) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3435) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3389) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1341) at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:931) at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:188) at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:156) at br.com.sistemarh.modelo.entidade.testeMain.main(testeMain.java:20)

OneToOne mesmo,. é que antes eu coloquei OneToMany para testar e acabei copiando o erro , eu ja verifiquei tudo nessas duas clases, fiz conforme os exemplos que vi nos foruns e realmente eu nao sei aonde estao o erro;

cole a classe Cbo ai

Mais uma coisa quando eu mudo de OneToOne para ManyToOne ou ManyToMany so para fazer testes funciona normal, o problema esta no OneToOne, e OneToMany

[quote=tmvolpato]cole a classe Cbo ai
[/quote][code]
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = “cbo”)
public class Cbo {
@Id
@GeneratedValue
@Column(name = “cbo_codigo”, nullable = false)
private int cboCodigo;
@Column(name = “cbo_funcao”, length = 255)
private String funcao;
@Column(name = “num_vagas”, length = 2)
private int numVagas;

public Cbo(int cbCodigo, String funcao, int numVagas) {
	super();
	this.cboCodigo = cbCodigo;
	this.funcao = funcao;
	this.numVagas = numVagas;
}

public Cbo() {
	super();
}

public int getCboCodigo() {
	return cboCodigo;
}

public void setCboCodigo(int cboCodigo) {
	this.cboCodigo = cboCodigo;
}

public String getFuncao() {
	return funcao;
}

public void setFuncao(String funcao) {
	this.funcao = funcao;
}

public int getNumVagas() {
	return numVagas;
}

public void setNumVagas(int numVagas) {
	this.numVagas = numVagas;
}

@Override
public String toString() {
	return "Cbo [codigo=" + cboCodigo + ", funcao=" + funcao
			+ ", numVagas=" + numVagas + "]";
}

}[/code]

Você só tem essas 2 classes no sistema com relacionamento?

[quote=tmvolpato]Você só tem essas 2 classes no sistema com relacionamento?

[/quote]Sim ate tenho outras… mas como estava dando problema eu criei novo projeto e coloquei so essas duas pra teste.
ai ta o main

[code]import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class testeMain {
public static void main(String[] args) {

	Configuration cfg = new Configuration();

/
cfg.addAnnotatedClass(Ocupacao.class);
cfg.addAnnotatedClass(Cbo.class);

	SchemaExport se = new SchemaExport(cfg);
	se.create(true, true);
}

}[/code]

as outras todas funcionam so essa que é OneToOne as outras sao ManyToMany

Acho que o mapeamento seria assim:

@Entity @Table(name = "cbo") public class Cbo { @Id @GeneratedValue @Column(name = "cbo_codigo", nullable = false) private int cboCodigo; @Column(name = "cbo_funcao", length = 255) private String funcao; @Column(name = "num_vagas", length = 2) private int numVagas; @OneToOne(mappedBy="cbo", cascade = CascadeType.ALL) private Ocupacao ocupacao; //... }

[code]
@Entity
@Table(name = “Ocupacao”)
public class Ocupacao {
@Id
@GeneratedValue
private int ocu_codigo;
@Column(name = “ocu_ultimo_emprego”, length = 256)
private String ultimoEmprego;
@Column(name = “ocu_observacao”, length = 256)
private String observacao;
@Column(name = “ocu_situacao”, length = 2)
private boolean situacao;
@Column(name = “ocu_data_situacao”)
private Date dataSituacao;

@OneToOne
@JoinColumn(name = "cbo_codigo", nullable = false)
private Cbo cbo;

//…
}[/code]

[quote=romarcio]Acho que o mapeamento seria assim:

@Entity @Table(name = "cbo") public class Cbo { @Id @GeneratedValue @Column(name = "cbo_codigo", nullable = false) private int cboCodigo; @Column(name = "cbo_funcao", length = 255) private String funcao; @Column(name = "num_vagas", length = 2) private int numVagas; @OneToOne(mappedBy="cbo", cascade = CascadeType.ALL) private Ocupacao ocupacao; //... }

[code]
@Entity
@Table(name = “Ocupacao”)
public class Ocupacao {
@Id
@GeneratedValue
private int ocu_codigo;
@Column(name = “ocu_ultimo_emprego”, length = 256)
private String ultimoEmprego;
@Column(name = “ocu_observacao”, length = 256)
private String observacao;
@Column(name = “ocu_situacao”, length = 2)
private boolean situacao;
@Column(name = “ocu_data_situacao”)
private Date dataSituacao;

@OneToOne
@JoinColumn(name = "cbo_codigo", nullable = false)
private Cbo cbo;

//…
}[/code][/quote]

O erro continua

deixe daquele jeito

caso a classe Cbo nao precise conhecer a classe Ocupação, mantenha daquele jeito

coloque assim

@OneToOne(cascade = CascadeType.ALL, optional = true, fetch = FetchType.EAGER, orphanRemoval = true) @JoinColumn(name = "cbo_codigo", nullable = false) private Cbo cbo;

tente ai

o que é Cbo?

Esse erro acontece quando você tenta criar as tabelas no banco? Ou quando você já tem elas lá e tenta fazer alguma operação de persistência?

Cbo = Cadastro Brasileiro de Ocupacoes

orphanRemoval = true esse nao deu pra colocar

[quote=Ezonic]Cbo = Cadastro Brasileiro de Ocupacoes

orphanRemoval = true esse nao deu pra colocar [/quote]

é pra ter sim é do jpa

eu nao trabalho dessa maneira para gerar a tabela

mas nao custa arruma sua Classe Ocupacao esta sem @Column no int (PrimaryKey) (nao é para ser isso, mas arrume)

realmente o meu nao da pra colocar nem aparece como opcao quando aperto Ctrl+ espaco
sera que tem algum problema com o meu eclipse?

[quote=tmvolpato]eu nao trabalho dessa maneira para gerar a tabela

mas nao custa arruma sua Classe Ocupacao esta sem @Column no int (PrimaryKey) (nao é para ser isso, mas arrume)[/quote]

Arrumei mais o erro persistiu