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!!!