tads
Fevereiro 17, 2004, 5:19pm
#1
Olá,
Estou tentando fazer um load num objeto, e até agora eu não tava tendo
problema algum… mas, tava vendo no banco de dados
(eu uso o oracle 8.1.7) ee ele está pendurando a sessão, não está
fechando…
olha o método que fiz:
public Object load(Class c, Integer generatedId) throws Exception, ObjectNotFoundException
{
Object o = null;
Session session = null;
try
{
session = factory.openSession();
o = (Object) session.load(c, generatedId);
session.flush();
}
catch (Exception e)
{
throw e;
}
finally
{
session.close();
}
return o;
}
Qdo eu vejo na base de dados, a tabela está “lockada” para este…
não sei o que pode ser… alguém pode me dar uma
ajuda por favor???
obrigado,
abraço
tads
Fevereiro 18, 2004, 9:26am
#2
Pessoal,
O mais engraçado nesta história, é que testei todos os java beans,
testando carregar objetos com chaves primarias sendo String, Long
e Integer, mas apenas um objeto está ocorrendo de locar a tabela.
As outras estão corretas, sem lockar as suas respectivas tabelas.
Valew
abraço
como esta o hbm desta classe??
tads
Fevereiro 18, 2004, 9:45am
#4
Lá vai o hbm, que inclusive estava comparando com outros.:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="embarcador.database.bean.manager.TruckDriver" table="caminhoneiro">
<id name="nbPamcard" column="nr_pamcard">
<generator class="assigned"/>
</id>
<property name="nbSequencePan" column="nr_sequencia_pan"/>
<property name="carrierPan" column="portador_pan"/>
<property name="digitPan" column="digito_pan"/>
<property name="counterPartPamcard" column="via_pamcard"/>
<property name="digitPamcard" column="digito_pamcard"/>
<many-to-one name="cardStatus" column="id_cartao_status"
class="embarcador.database.bean.manager.CardStatus"/>
<many-to-one name="cardType" column="id_cartao_tipo"
class="embarcador.database.bean.manager.CardType"/>
<property name="cpf" column="cpf"/>
<property name="rg" column="rg"/>
<many-to-one name="ufRg" column="uf_rg"
class="embarcador.database.bean.manager.State"/>
<property name="name" column="nome"/>
<property name="reducedName" column="nome_reduzido"/>
<property name="fatherName" column="nome_pai"/>
<property name="motherName" column="nome_mae"/>
<property name="dtBirth" column="dt_nascimento"/>
<property name="address" column="logradouro"/>
<property name="number" column="numero"/>
<property name="complement" column="complemento"/>
<property name="burgh" column="bairro"/>
<many-to-one name="city" column="id_cidade"
class="embarcador.database.bean.manager.City"/>
<property name="cep" column="cep"/>
<property name="companyCorporateName" column="razao_social_empresa"/>
<property name="companyAddress" column="logradouro_empresa"/>
<property name="companyNumber" column="numero_empresa"/>
<property name="companyComplement" column="complemento_empresa"/>
<property name="companyBurgh" column="bairro_empresa"/>
<many-to-one name="companyCity" column="id_cidade_empresa"
class="embarcador.database.bean.manager.City"/>
<property name="companyCep" column="cep_empresa"/>
<property name="deliveryAddress" column="logradouro_entrega"/>
<property name="deliveryNumber" column="numero_entrega"/>
<property name="deliveryComplement" column="complemento_entrega"/>
<property name="deliveryBurgh" column="bairro_entrega"/>
<many-to-one name="deliveryCity" column="id_cidade_entrega"
class="embarcador.database.bean.manager.City"/>
<property name="deliveryCep" column="cep_entrega"/>
<many-to-one name="addressType" column="id_endereco_tipo"
class="embarcador.database.bean.manager.AddressType"/>
<property name="dtMaintenance" column="dt_manutencao"/>
<property name="cardExpiration" column="expiracao_cartao"/>
<bag name="trips" inverse="true" lazy="true">
<key column="nr_pamcard"/>
<one-to-many class="embarcador.database.bean.trip.Trip"/>
</bag>
</class>
</hibernate-mapping>
<!-- parsed in 0ms -->
valew
abraço
tads
Fevereiro 18, 2004, 1:33pm
#5
Olá, eu tava conversando sobre este problema no fórum
do hibernate.org e me recomendaram forçar o uso de transações
no método load, ficando assim:
public Object load(Class c, Integer generatedId) throws Exception, ObjectNotFoundException
{
Object o = null;
Session session = null;
Transaction tx = null;
try
{
session = factory.openSession();
tx = session.beginTransaction();
o = (Object) session.load(c, generatedId);
tx.commit();
session.flush();
}
catch (Exception e)
{
try
{
tx.rollback();
}
catch (HibernateException e1)
{
throw e1;
}
throw e;
}
finally
{
try
{
session.close();
}
catch (HibernateException e1)
{
throw e1;
}
}
return o;
}
do jeito acima, o objeto não ficou “lockado” na base de dados.
O que vs acham desta implementação???
valew!!!
abraço
bom, eu sempre utilizo isto na volta dos metodos de acesso a dados, não dentro deles
mas é sempre bom vc controlar as suas transações.
e se isto resolveu, vc tem um bug no hibernate, pq ele deveria startar uma transação com a session, e commitar ela quando fecha a session
tads
Fevereiro 18, 2004, 1:55pm
#7
Putz meu!!! sério??
O que eu não entendo é que é sempre qdo executo o load no mesmo objeto TruckDriver… Por que deixa “lockado” sempre este Objeto e não nos outros?
estranho!!!
Mas e agora??? a gente manda email pro Gavin King??? hehe
falow,
abraço
Pessoa boa noite. Aproveitando este tópico, venho pedir ajuda a vocês.
Estou começando agora com o Hibernate e VRptor, utilizando a apostila da caelum fj-28
Estou tendo um problema com meu método de alteração de produtos, tipo, não ocorre nenhuma exception, o método é executado normal, mas o resultado não é alterado. Esse erro começou a ocorrer depois que fiz a refatoração no meu código, vou postar o código aqui pra alguem me ajudar.
Classe DAO
[code]public class ProdutoDao {
private Session sessao;
public ProdutoDao() {
this.sessao = new com.vraptor.util.Session().getSession();
}
public void altera(Produto produto, int id) {
Transaction update = sessao.beginTransaction();
produto = (Produto) sessao.load(Produto.class, id);
sessao.update(produto);
update.commit();
}
}[/code]
Classe Main para alterar
[code]public class AlteracaoDeProduto {
public static void main(String[] args) {
try {
Produto p = getProduto();
new ProdutoDao().altera(p, 2);
} catch (Exception e) {
e.printStackTrace();
}
}
private static Produto getProduto() {
Produto p = new Produto();
p.setPreco(2900.00);
return p;
}
}[/code]