Chave composta socorro!

Galera tenho as seguintes classes :

Entrada

[code]@Embeddable
@IdClass(Entrada.class)
public class Entrada {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer numero ;
		
@Embedded
@Temporal(TemporalType.DATE)
private Date dataEntrada;	 	
 
@ManyToOne
@JoinColumn(name="FORNECEDOR")
private Fornecedor fornecedor;
	
@OneToMany()
private List<ItemEntrada> itemEntrada;

}[/code]

ItemEntrada

[code]@Entity
public class ItemEntrada {

@Column(precision=9, scale=2)
private Double quantidade;
 
@Column(precision=9, scale=2)
private Double valor;
   
@ManyToOne
@JoinColumn(name="INSUMO")
private Insumo insumo;

@EmbeddedId
@ManyToOne
@JoinColumns({@JoinColumn(name="NUMERO"),@JoinColumn(name="DATAENTRADA")})
private Entrada entrada;

}[/code]

qdo mando criar as tabelas no banco, a tabela “ItemEntrada” é criada com as chaves composta… blz certinho!!..

Só que a tabela de Entrada não é criada…

Alguém manja ?

a tabela não é criada pq a classe entrada não ta anotada com @Entity…Ela é um ID…id não representa uma entidade

então… veio… se eu colocar a anotação “Entity” da esse erro aí :

Exception in thread "main" javax.persistence.PersistenceException: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.0 (Build b41-beta2 (03/30/2007))): oracle.toplink.essentials.exceptions.EntityManagerSetupException Exception Description: predeploy for PersistenceUnit [foodmanager] failed. Internal Exception: java.lang.NullPointerException at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:615) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.callPredeploy(JavaSECMPInitializer.java:146) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.initPersistenceUnits(JavaSECMPInitializer.java:226) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.initialize(JavaSECMPInitializer.java:242) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.initializeFromMain(JavaSECMPInitializer.java:278) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.getJavaSECMPInitializer(JavaSECMPInitializer.java:81) at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:119) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83) at util.CriarBanco.main(CriarBanco.java:18) Caused by: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.0 (Build b41-beta2 (03/30/2007))): oracle.toplink.essentials.exceptions.EntityManagerSetupException Exception Description: predeploy for PersistenceUnit [foodmanager] failed. Internal Exception: java.lang.NullPointerException at oracle.toplink.essentials.exceptions.EntityManagerSetupException.predeployFailed(EntityManagerSetupException.java:212) ... 9 more Caused by: java.lang.NullPointerException at oracle.toplink.essentials.internal.ejb.cmp3.metadata.MetadataDescriptor.usesPropertyAccess(MetadataDescriptor.java:1062) at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.EmbeddedIdAccessor.processEmbeddableClass(EmbeddedIdAccessor.java:130) at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.EmbeddedAccessor.process(EmbeddedAccessor.java:283) at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.EmbeddedIdAccessor.process(EmbeddedIdAccessor.java:89) at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.ClassAccessor.processAccessor(ClassAccessor.java:513) at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.ClassAccessor.processAccessorFields(ClassAccessor.java:526) at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.ClassAccessor.processAccessors(ClassAccessor.java:552) at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.ClassAccessor.process(ClassAccessor.java:483) at oracle.toplink.essentials.internal.ejb.cmp3.metadata.MetadataProcessor.processAnnotations(MetadataProcessor.java:225) at oracle.toplink.essentials.ejb.cmp3.persistence.PersistenceUnitProcessor.processORMetadata(PersistenceUnitProcessor.java:354) at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:584) ... 8 more

como q faço pra resolver esse relacionamento ?

pessoal, pesquisando e pesquisando por aí… fiz a seguinte alteração…

Entrada

[code]@Entity
public class Entrada implements Serializable {

private static final long serialVersionUID = 1L;

@EmbeddedId
private EntradaPK entradaPK;

@ManyToOne
@JoinColumn(name="FORNECEDOR")
private Fornecedor fornecedor;
	
@OneToMany()
private List<ItemEntrada> itemEntrada;

}[/code]

ItemEntrada

[code]@Entity
public class ItemEntrada implements Serializable {

private static final long serialVersionUID = 1L;

@Column(precision=9, scale=2)
private Double quantidade;
 
@Column(precision=9, scale=2)
private Double valor;
   
@ManyToOne
@JoinColumn(name="INSUMO")
private Insumo insumo;

@EmbeddedId
@ManyToOne
@JoinColumns({@JoinColumn(name="numero"), @JoinColumn(name="dataEntrada")})	
private EntradaPK entradaPK;

}[/code]

EntradaPK

[code]@Embeddable
public class EntradaPK implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer numero;

@Embedded
@Temporal(value=TemporalType.DATE)
private Date dataEntrada;

}[/code]

Quando vou gerar as tabelas do banco de dados, ele Cria a tabela Entrada e ItemEntrada certinho. Só que agora ele está criando também uma tabela entrada_itementrada, que não deveria ser criada.

Me ajudem por favor!!!

Galera to quase chegando… só ta faltando um empurrãozinho!!!

Fiz essas modificações, ele criou a tabela entrada, mas o campo “DATAENTRADA” não ficou como PK

+----------------+--------------+------+-----+ | Field | Type | Null | Key | +----------------+--------------+------+-----+ | NUMERO | int(11) | | PRI | | DATAENTRADA | date | YES | | | FORNECEDOR | int(11) | YES | | +----------------+--------------+------+-----+

e a tabela itemEntrada o “INSUMO” não ficou como chave primária e ele criou um atributo a mais “ENTRADANUMERO”.

+----------------+--------------+------+-----+
| Field          | Type         | Null | Key |
+----------------+--------------+------+-----+
| VALOR          | double       | YES  |     |
| QUANTIDADE     | double       | YES  |     |
| DATAENTRADA    | date         |      | PRI |
| NUMERO         | int(11)      |      | PRI |
| ENTRADA_NUMERO | int(11)      | YES  |     |
| INSUMO         | varchar(255) | YES  |     |
+----------------+--------------+------+-----+

Entrada

[code]@Entity
public class Entrada implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)	
private Integer numero;
	
@Embedded
@Temporal(value=TemporalType.DATE)	
private Date dataEntrada;

@ManyToOne()
@JoinColumn(name="FORNECEDOR")
private Fornecedor fornecedor;

@OneToMany(targetEntity=ItemEntrada.class, mappedBy="entrada")
private List<ItemEntrada> itemEntrada ;	

}[/code]

ItemEntrada

[code]@Entity
public class ItemEntrada implements Serializable {

private static final long serialVersionUID = 1L;
	
@Embeddable
static class EntradaPK{

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer numero;
		
	@Embedded
	@Temporal(value=TemporalType.DATE)	
	private Date dataEntrada;
		
	//@Id
	//private Integer insumo;
	
	@ManyToOne(targetEntity = Insumo.class)
	@JoinColumn(name="INSUMO", insertable=false, updatable=false)		
	private Insumo insumo;	
	
	@ManyToOne(targetEntity = Entrada.class)		
	private Entrada entrada;
	
	public Entrada getEntrada() {
		return entrada;
	}

	public void setEntrada(Entrada entrada) {
		this.entrada = entrada;
	}

		
}

@Column(precision=9, scale=2)
private Double quantidade;
 
@Column(precision=9, scale=2)
private Double valor;
	
@EmbeddedId
private EntradaPK entradaPK;

}[/code]

Alguém me ajuda ae PLEASE!!!