Olá, pessoal!
Estou aprendendo EJB3 e criei um exemplo bem simples pra rodar no JBoss.
Descrição:
Criei uma class Pessoa e uma class Carro. O banco de dados é gerado automaticamente pelo Hibernate.
O EJB está funcionando pois consigo pesquisar registros q já estão no banco. Mas qndo tento inserir uma Pessoa nova, por exemplo, eu não consigo pegar a Primary Key do novo registro. O q torna impossível inserir carros para as pessoas.
Pessoa.java
package tenorio.rodrigo.exemplos.bancodedados;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class Pessoa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nome;
private String cpf;
@OneToMany(mappedBy = "proprietarioId", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
private Set<Carro> carro = new HashSet<Carro>();
public Pessoa() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public void setCarro(Set<Carro> choices) {
this.carro = choices;
}
public Set<Carro> getCarro() {
return carro;
}
}
Carro.java
package tenorio.rodrigo.exemplos.bancodedados;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Carro implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String placa;
@Column (name="proprietario_id")
private int proprietarioId; // pessoa_id
public Carro() {
}
public void setId(long id) {
this.id = id;
}
public long getId() {
return id;
}
public void setPlaca(String placa) {
this.placa = placa;
}
public String getPlaca() {
return placa;
}
public void setProprietarioId(int proprietarioId) {
this.proprietarioId = proprietarioId;
}
public int getProprietarioId() {
return proprietarioId;
}
}
persistence.xml
<persistence>
<persistence-unit name="bancoDeDados">
<jta-data-source>java:/PostgresDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
DAODBRemote.java
package tenorio.rodrigo.exemplos.bancodedados;
import javax.ejb.Remote;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
@Remote
public interface DAODBRemote {
public Pessoa findPessoa(int id);
public void createPessoa(Pessoa pessoa);
}
DAODBBean.java
package tenorio.rodrigo.exemplos.bancodedados;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateful
public class DAODBBean implements DAODBRemote {
@PersistenceContext(unitName = "bancoDeDados")
private EntityManager manager;
public Pessoa findPessoa(int id) {
return this.manager.find(Pessoa.class, id);
}
public void createPessoa(Pessoa pessoa) {
this.manager.persist(pessoa);
}
}
Client.java
package tenorio.rodrigo.exemplos.bancodedados.client;
import java.util.Properties;
import javax.naming.InitialContext;
import tenorio.rodrigo.exemplos.bancodedados.DAODBRemote;
import tenorio.rodrigo.exemplos.bancodedados.Pessoa;
public class Client {
public Client() {
try {
Properties properties = new Properties();
properties.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs", "=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url", "localhost:1099");
InitialContext ctx = new InitialContext(properties);
DAODBRemote daoDBRemote = (DAODBRemote)ctx.lookup("DAODBBean/remote");
Pessoa pessoa = new Pessoa();
pessoa.setCpf("000.000.000-01");
pessoa.setNome("Nome 01");
daoDBRemote.createPessoa(pessoa);
System.out.println("daoDBRemote.createPessoa(pessoa) == " + pessoa.getId());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Client();
}
}
Valeu galera!!! Fico aguardando uma luz