Toplink

Bom, não sou muito experiente em programação Java, to tentando criar um programa, utilizando o toplink como persistencia no banco.
Bom, meu problema eh o seguinte… tenho uma tabela no banco de dados (postgresql) que tem 3 chaves primárias, crio o persistence e crio as classes mapeadas pelo toplink. Neste caso ele cria uma tabela adicional (Ex: nomedaTabelaPK) com as chaves primárias, até ai tudo bem. O problema está na hora em que eu preciso fazer inserções com estes campos… Minha dúvida eh de como eu faço a referência a estes campos…

Desde já, agradeço a todas as respostas…

Suas primary keys são auto increment ???

Não… elas nao são auto increment…

Então cara…vc deve trabalhar da mesma forma que vc faria no BD…se vc não tem os valores pro ID ou vc põe na mão…ou pega o último valor da tabela de primaryjeys e soma mais um…

aí não tem jeito…

Vc está usando o toplink como persistence provider para JPA ou como ORM standalone?

cara nao entendi… viu eh o seguinte Giulliano… to tentando fazer o seguinte

   public static void main(String[] args) {
    BaseDao<AnaEx> dao = new BaseDao<AnaEx>();
    
    AnaEx ana = new AnaEx();
    
    ana.getAnaExPK().setCodigo(1);
    ana.getAnaExPK().setConsistencia(2);
    ana.setChuva(2.1);
    
    System.out.println("Codigo: " + ana.getAnaExPK().getCodigo());
    System.out.println("Consistencia: " + ana.getAnaExPK().getConsistencia());
    System.out.println("Chuva: " + ana.getChuva());
    
   dao.create(ana);
    
}

preciso setar esses valores por exemplo ta, so que desse jeito aqui nao ta dando certo...

como persistence provider…

mas porque não tá dando certo? poste o stack trace para ajudar…

Bom, está dando este erro aqui…

run:
[TopLink Info]: 2008.03.14 08:09:50.940–ServerSession(8116722)–TopLink, version: Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))
[TopLink Info]: 2008.03.14 08:09:51.518–ServerSession(8116722)–file:/C:/Documents%20and%20Settings/USUARIO/Desktop/testeChavesComp/build/classes/-testeChavesCompPU login successful
Exception in thread “main” java.lang.NullPointerException
at principal.principalA.main(principalA.java:16)
Java Result: 1

BUILD SUCCESSFUL (total time: 2 seconds)

e aonde vc instancia o objeto responsável por mapear as Pk´s?

Bom, essa eh a primeira vez q estou utilizando o toplink, ainda não to muito por dentro de todo o seu potencial…
meu exemplo está da seguinte maneira… tenho um persistence.xml com mapeamento das tabelas do banco… que no caso seria apenas uma, só estou tentando criar um exemplo, ta… como esta tabela tem dois campos como chave primária, na hora de gerar as classes aqui o toplink cria uma nova classe so com as chaves primarias, ta… e ai q ta, nao to conseguindo nem acessar e nem inserir dados nessas chaves. Criei um pacote model para armazenar as classes mapeadas das tabelas… e em outro pacote criei uma classe chamada BaseDao com o seguinte conteúdo:

public class BaseDao {
private static EntityManagerFactory emf;
private EntityManager em;

public BaseDao(){
    emf = Persistence.createEntityManagerFactory("testeChavesCompPU");
    em = emf.createEntityManager();
}

  public boolean create(T obj){
    //incia uma transaçao
    em.getTransaction().begin();
    System.out.println("iniciou transaction..");
    try{
        //persiste o objeto recebido por parametro para o banco
        em.persist(obj);
        //faz o commit no banco
        em.getTransaction().commit();
        em.clear();
        System.out.println("Fez o comitt");
        return true;
    }catch(Exception e){
        e.printStackTrace();
        em.getTransaction().rollback();
        return false;
    }
            
} 

}

e tenho uma classe que está postada aqui… que instancia o BaseDao… até o momento eh isso…

ta e aonde vc instancia os objetos pk? nesse código q vc postou não há instancia criada ainda das pks…

 public static void main(String[] args) {
BaseDao<AnaEx> dao = new BaseDao<AnaEx>();

AnaEx ana = new AnaEx();

ana.getAnaExPK().setCodigo(1);
ana.getAnaExPK().setConsistencia(2);
ana.setChuva(2.1);

System.out.println("Codigo: " + ana.getAnaExPK().getCodigo());
System.out.println("Consistencia: " + ana.getAnaExPK().getConsistencia());
System.out.println("Chuva: " + ana.getChuva());

dao.create(ana);

} 

dê uma olhada…

cara eu nao instancio a classe AnaExPK porque dentro da classe AnaEx, essa eh a que eu instanciei, já faz referência a PK dela… eh atraves dela que eu tento acessar a PK…

e ai pessoal, bom ainda não sai do lugar, se alguém tiver alguma idéia ai fico grato…

Bom, consegui resolver o meu problema, deixo aqui a solução para futuramente quem estiver precisando.

public static void main(String[] args) {
BaseDao dao = new BaseDao();

AnaEx ana = new AnaEx(new AnaExPK());

ana.getAnaExPK().setCodigo(1);
ana.getAnaExPK().setConsistencia(2);
ana.setChuva(2.1);

System.out.println("Codigo: " + ana.getAnaExPK().getCodigo());
System.out.println("Consistencia: " + ana.getAnaExPK().getConsistencia());
System.out.println("Chuva: " + ana.getChuva());

dao.create(ana);

}

e não era o que eu falei que estava faltando??? Inicializar o objeto pk???

Sim… Valeu pela ajuda…