Pessoal,
Criei meu mapeamento no hibernate entre Veiculo e Ordem de Servico e está fazendo o cascade quando eu excluo um veiculo, eu achava que por default o hibernate não fazia cascade e eu não quero que faça quero que gere uma exception caso aquele veiculo tenha alguma OS. Segue minhas configurações…
Veiculo.java
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name = "veiculo", uniqueConstraints={@UniqueConstraint(columnNames={"cliente_id",
"placa"})})
public class Veiculo implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8351288406225246425L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "veiculo")
@SequenceGenerator(name = "veiculo", sequenceName = "veiculo_seq")
@Column(name = "id")
private Long id;
@ManyToOne
@JoinColumn(name="cliente_id", nullable = false)
private Cliente cliente;
@Column(name = "placa", nullable = false, length = 10)
private String placa;
@ManyToOne
@JoinColumn(name="carro_modelo_id", nullable = false)
private CarroModelo carroModelo;
@Column(name = "chassis", nullable = true, length = 90)
private String chassis;
@Column(name = "motor", nullable = false, length = 10)
private String motor;
@Column(name = "ano_fabr_modelo", nullable = false, length = 10)
private String anoFabricacaoModelo;
@Column(name = "combustivel", nullable = false, length = 10)
private String combustivel;
@Column(name = "cambio", nullable = true, length = 15)
private String cambio;
@Column(name = "dir_hidr", columnDefinition = "BIT", length = 1, nullable = false)
private boolean direcaoHidraulica;
@Column(name = "ar_cond", columnDefinition = "BIT", length = 1, nullable = false)
private boolean arCondicionado;
@Column(name = "observacao", length = 200, nullable = true)
private String observacao;
@OneToMany(mappedBy="veiculo", fetch = FetchType.LAZY)
private Set<OrdemServico> ordemServicos = new HashSet<OrdemServico>();
// gets e sets
OrdemServico.java
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import br.com.brandom.oficina.util.DataUtil;
@Entity
@Table(name = "ordem_servico")
public class OrdemServico implements Serializable {
/**
*
*/
private static final long serialVersionUID = 7126002522090447667L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "ordem_servico")
@SequenceGenerator(name = "ordem_servico", sequenceName = "ordem_servico_seq")
@Column(name = "id")
private Long id;
@Column(name = "nro_os", nullable = false)
private Long numeroOs;
@ManyToOne
@JoinColumn(name="veiculo_id", nullable = false)
private Veiculo veiculo;
@Column(name = "tanque", nullable = true, length = 3)
private String tanque;
@Column(name = "kilometragem", nullable = false)
private Integer kilometragem;
@Column(name = "nm_motorista", nullable = true, length = 100)
private String motorista;
@Column(name = "dt_entrada", nullable = false)
private Date dataEntrada;
@Column(name = "dt_previsao", nullable = true)
private Date dataPrevisao;
// gets e sets
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.datasource">java:comp/env/jdbc/oficina</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">validate</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.generate_statistics">false</property>
<property name="hibernate.connection.autocommit">true</property>
<property name="hibernate.use_outer_join">true</property>
<property name="hibernate.connection.autoReconnect">true</property>
<property name="hibernate.connection.autoReconnectForPools">true</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">30</property> <!-- seconds -->
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.timeout">3000</property>
<property name="hibernate.search.default.directory_provider">
org.hibernate.search.store.impl.FSDirectoryProvider
</property>
<!-- <property name="hibernate.search.default.indexBase">
/home/mecanica/var/brandom/oficina/indexes
</property> -->
<property name="hibernate.search.default.indexBase">
/Users/demo/Documents/develop/var/brandom/oficina/indexes
</property>
<mapping class="br.com.brandom.oficina.model.Pais" />
<mapping class="br.com.brandom.oficina.model.Estado" />
<mapping class="br.com.brandom.oficina.model.Cidade" />
<mapping class="br.com.brandom.oficina.model.Empresa" />
<mapping class="br.com.brandom.oficina.model.Login" />
<mapping class="br.com.brandom.oficina.model.Cliente" />
<mapping class="br.com.brandom.oficina.model.Telefone" />
<mapping class="br.com.brandom.oficina.model.Endereco" />
<mapping class="br.com.brandom.oficina.model.CarroMarca" />
<mapping class="br.com.brandom.oficina.model.CarroModelo" />
<mapping class="br.com.brandom.oficina.model.Veiculo" />
<mapping class="br.com.brandom.oficina.model.OrdemServico" />
<mapping class="br.com.brandom.oficina.model.Falha" />
<mapping class="br.com.brandom.oficina.model.OrdemServicoFalha" />
<mapping class="br.com.brandom.oficina.model.OrdemServicoMaoDeObra" />
<mapping class="br.com.brandom.oficina.model.OrdemServicoPeca" />
<event type="post-update">
<listener class="org.hibernate.search.event.FullTextIndexEventListener"/>
</event>
<event type="post-insert">
<listener class="org.hibernate.search.event.FullTextIndexEventListener"/>
</event>
<event type="post-delete">
<listener class="org.hibernate.search.event.FullTextIndexEventListener"/>
</event>
</session-factory>
</hibernate-configuration>
o meu método delete está assim
@Override
public void delete(T entity) {
Object c = getSession().merge(entity);
getSession().delete(c);
}