Eu mapiei meus models:
funcionario:
@Entity(name = "Funcionario")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipo", length = 1, discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("F")
@Table(name = "funconario")
public abstract class Funcionario implements Autenticar {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "codFuncionario")
private String codFuncionario;
@ManyToOne
@JoinColumn(name="departamento_codDepart", referencedColumnName="codDepart",nullable=false)
private Departamento departamento;
private Endereco endereco;
@Column(name = "matricula")
private String matricula;
@Column(name = "nome")
private String nome;
@Column(name = "cpf")
private String cpf;
@Column(name = "rg")
private String rg;
@Column(name = "usuario")
private String usuario;
@Column(name = "senha")
private String senha;
@Column(name = "dataEntrada")
private Date dataEntrada;
@Column(name = "dataSaida")
private Date dataSaida;
@Column(name = "dataNascimento")
private Date dataNascimento;
@Column(name = "salario")
private Double salario;
//gets and setters
minha classe departamento:
@Entity
@Table(name=“departamento”)
public class Departamento {
@Id
@GeneratedValue
private Integer codDepartamento;
@Column(name=“nome”)
private String nomeDepartamento;
@OneToMany(mappedBy="departamento", cascade= CascadeType.ALL)
private Set<Funcionario> funcionarios;
tenho um relacionamento 1:n
criei um main:
Funcionario funcionario = new Vendedor();
Departamento departamento = new Departamento();
funcionario.setNome("Maria");
funcionario.setCpf("11111111111");
funcionario.setRg("2222222222");
funcionario.setMatricula("124");
funcionario.setDataNascimento(java.sql.Date.valueOf("2005-02-01"));
funcionario.setDataEntrada(java.sql.Date.valueOf("2005-02-01"));
funcionario.setSalario(987.00);
funcionario.setUsuario("xd");
funcionario.setSenha("xd");
Set<Funcionario> funcionarios = new HashSet<Funcionario>();
funcionarios.add(funcionario);
funcionarios.add(funcionario);
departamento.setNomeDepartamento("teste");
mas estou com dúvida em como vou adicionar esse departamento e esse funcionario com esse departamento utilizando DAO
public Funcionario save(Funcionario func){
}
public Departamento save(Departamento depart){
}
alguém poderia me ajudar?
Como vc mapeou como cascadeAll acredito que não precisa salvar um por um, porém eu prefiro salvar um por um.
public Funcionario save(Funcionario func){
Departamento departamento = repositoryDepartamento.findById(func.departamento.getId());
func = repository.save(func);
departamento.add(Arrays.asList(func));
repositoryDepartamento Ou serviceDepartamento.save(departamento);
}
public Departamento save(Departamento depart){
repository.save(depart);
}
no caso eu dou o save no departamento primeiro e depois chamo o save funcionario?
E o que seria esse repository? Não tenho essa classe / metodo.
isso o departamento já tem que existir
1 curtida
repository é como se fosse a dao, faz o seguinte exemplo mais genérico:
public Funcionario save(Funcionario func){
busca departamento por id func.departamento.getId() aqui você pode obter o id
func = salvar o funcionario
departamento.add(Arrays.asList(func)); **aqui vc adiciona ao departamento o funcionario novo com Id novo gerado pelo banco**
salva o departamento(departamento);
}
public Departamento save(Departamento depart){
chamando metodo de salvar departamento
}
vc poderia me passar essa classe repository?
seria isso aqui:
public class HibernateUtil {
private static StandardServiceRegistry registry;
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
try {
// Cria o registro
//Para saber mais
//https://docs.jboss.org/hibernate/orm/5.3/javadocs/org/hibernate/boot/registry/class-use/StandardServiceRegistry.html
registry = new StandardServiceRegistryBuilder().configure().build();
// Cria oMetadataSources
//para saber mais
//https://docs.jboss.org/hibernate/orm/5.3/javadocs/org/hibernate/boot/MetadataSources.html
MetadataSources sources = new MetadataSources(registry);
// Create Metadata
//para saber mais
//https://docs.jboss.org/hibernate/orm/5.3/javadocs/org/hibernate/boot/Metadata.html
Metadata metadata = sources.getMetadataBuilder().build();
// Create SessionFactory
//para saber mais
//https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/SessionFactory.html
sessionFactory = metadata.getSessionFactoryBuilder().build();
} catch (Exception e) {
e.printStackTrace();
if (registry != null) {
StandardServiceRegistryBuilder.destroy(registry);
}
}
}
return sessionFactory;
}
public static void fecharConexoes() {
if (registry != null) {
StandardServiceRegistryBuilder.destroy(registry);
}
}
}
e tipo caso eu crie 3 departamentos / 1 /2 /3
como eu vou saber qual desses 3 departamentos vai adicionar no funcionario?
no seu método save agora faz o seguinte.
Session session = null;
Transaction transaction = null;
try{
Session session = this.session.getSessionFactory().openSession();
transaction = session.beginTransaction();
transaction.begin();
aqui faz aquele esquema de orientação a objeto
setando os objetos que você quer
e pra finalizar
transaction.commit();
*tudo isso envolvido com bloco try catch
} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
HibernateUtil.shutdown();
fiquei um pouco confuso com isso tipo o meu metodo de salvar um departamento:
ficaria assim?
public Departamento save(Departamento depart) {
Session session = null;
Transaction transaction = null;
try {
session.getSessionFactory().openSession();
transaction = session.beginTransaction();
transaction.begin();
transaction.commit();
} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
HibernateUtil.fecharConexoes();
return depart;
}
e se tiver como vc me ajudar como ficaria o metodo do funcionario pq eu fiquei um pouco confuso .
entre o begin e o commit vc fará algumas ações, como
session.save(departamento);
procure sobre examples hibernate save, update, find que vc vai achar tudoo!
Todo esse código que vc postou agora é padrão, o que vai mudar é o comando entre o begin e o commit, ele vai definir o que vc vai fazer no banco.
1 curtida
entendi vlw man consegui entender melhor agr
1 curtida
so pode me tirar mais uma duvida man?
o begin e pra dar um select
tem algo parecido com o resultset no hibernate?
Um exemplo tirado deste site
https://www.mkyong.com/hibernate/hibernate-query-examples-hql/
Tem esta forma
Query query = session.createQuery("from Stock where stockCode = :code ");
query.setParameter("code", "7277");
List list = query.list();
E esta forma
session = HibernateUtil.getSessionFactory().openSession();
funcionario = (Funcionario) session.get(Funcionario.class, funcionario_id);
1 curtida