Senhores
alguem poderia me tirar uma duvida? Sou principiante no Hibernate e estou me afogando aqui com essa API…
Estou tentando fazer um relacionamento 1…N em JPA com ele, e aparentemente ele INVERTEU a ordem do insert por livre e espontanea vontade… seguem as classes
Se alguem puder tambem conferir se este mapeamento esta certo… pq realmente, estou começando a ficar perdido… as entidades são:
Computador.class
@javax.persistence.Entity
@javax.persistence.Table(name="tb_computador")
public class Computador implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -5489913662420004430L;
@EmbeddedId
private ComputadorPK id = new ComputadorPK();
@Column(name="desktop")
private Boolean desktop;
@Column(name="nome")
private String nome;
@Column(name="tipo")
private String tipo;
@Column(name="modelo")
private String modelo;
@Column(name="fabricante")
private String fabricante;
@Column(name="serial")
private String serial;
@Column(name="bios_fabricante")
private String biosFabricante;
@Column(name="bios_versao")
private String biosVersao;
@Column(name="usuario_logado")
private String usuarioLogado;
@Column(name="memoria_total")
private Long memoriaTotal;
@Column(name="memoria_maxima")
private Long memoriaMaxima;
@OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumns({
@JoinColumn(name="machine_id"),
@JoinColumn(name="data_coleta")
})
private List<Processador> processador = new Vector<Processador>(0);
ComputadorPK.class
@Embeddable
public class ComputadorPK implements Serializable{
/**
*
*/
private static final long serialVersionUID = 8217839634047714977L;
@Column(name="machine_id", nullable = false)
private String machineID;
@Column(name="data_coleta", nullable = false)
private Date dataColeta;
Processador.class
@Entity
@Table(name="tb_processador")
public class Processador implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 4885269978524490258L;
@EmbeddedId
private ComputadorPK id = new ComputadorPK();
// private long procId;
@Column(name="cpu_id")
private String cpuId;
@Column(name="nome")
private String nome;
@Column(name="fabricante")
private String fabricante;
@Column(name="descricao")
private String descricao;
@Column(name="soquete")
private String soquete;
@Column(name="clock")
private Integer clock;
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.password">*********</property>
<property name="hibernate.connection.url">jdbc:postgresql:JAMDB</property>
<property name="hibernate.connection.username">***********</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.show_sql">true</property>
<mapping class="TESTE.Computador"></mapping>
<mapping class="TESTE.Processador"></mapping>
</session-factory>
</hibernate-configuration>
Meu DAO de testes…
ublic class TesteDAO {
private SessionFactory factory;
public TesteDAO() {
AnnotationConfiguration conf = new AnnotationConfiguration();
conf.addAnnotatedClass(TESTE.Computador.class);
conf.addAnnotatedClass(TESTE.Processador.class);
conf.configure();
factory = conf.buildSessionFactory();
}
public void insert(Computador a) {
Session session = factory.openSession();
Transaction t = session.beginTransaction();
session.saveOrUpdate(a);
if (t != null)
t.commit();
session.flush();
session.close();
}
public static void main(String[] args) {
TESTE.Computador c = new TESTE.Computador();
c.setBiosFabricante("ZICA");
c.setBiosVersao("ASDA");
c.getId().setDataColeta(Calendar.getInstance().getTime());
c.setDesktop(true);
c.setFabricante("FABRICA");
c.setMemoriaMaxima(1234L);
c.setMemoriaTotal(4567L);
c.setModelo("MODELO_ALTERADO");
c.setNome("ASDA");
c.setSerial("SERIAL");
c.setTipo("TYPE");
c.setUsuarioLogado("ADMINISTRADOR");
List<TESTE.Processador> s = new Vector<TESTE.Processador>();
Processador p = new Processador();
p.setClock(1234);
p.setCpuId("ASDA1234");
p.setDescricao("COMPUTADÔ");
p.setFabricante("AMD");
p.setNome("ATHLON_ALTERADO");
p.setSoquete("sock");
s.add(p);
c.setProcessadores(s);
c.generateMachineID();
p.getId().setMachineID(c.getId().getMachineID());
p.getId().setDataColeta(c.getId().getDataColeta());
TesteDAO t = new TesteDAO();
t.insert(c);
}
Obrigado!