Problema load Hibernate

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

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??

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

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 :slight_smile:

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

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]