Outro problema com Hibernate

Erro ao tentar deletar, se ao deletar tiver só item ao ser deletado, ele não da erro, se tiver dois ou mais aparece isso:org.hibernate.jdbc.BatchedTooManyRowsAffectedException: Batch update returned unexpected row count from update [0]; actual row count: 3; expected: 1

meu xml ta assim

<?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.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/casa</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping class="pack.Link"/>
</session-factory>
</hibernate-configuration>

e minha classe que executa ta assim:

public static void main(String[]args)
	{
		
		 
		 AnnotationConfiguration configuration = new AnnotationConfiguration();
		 configuration.configure();
		
		 SessionFactory factory = configuration.buildSessionFactory();
		 Session session = factory.openSession();
		 
		 
		 Transaction tx = session.beginTransaction();
		 Link link = new Link();
		 link.setNome("fera");
		 session.delete(link);
		 tx.commit();
		 
		
	}

alguem sabe como resolve isso?Não estou usando o hbm.xml antes que perguntem isso, estou tendo problemas com ele ainda, mas pretendo usa-lo

então mostra o código dessa classe Link ae…

Você não esta especificando uma id somente no seu objeto link então ele ira excluir toda a tabela, uma operação que, pelo jeito, não pode ser feita.

O correto seria você buscar o quer do banco, preencher seu objeto e depois deletar ele.

A link não tem nada de mais, só tem getteres e setteres e a notação @Entity e @Id,mais nada.

Então você tem que pelo menos preencher o id para o hibernate saber qual deletar

Humm, certo, mas então o hibernate não funciona corretamente com apensa uma coluna sem o id?Se que ter chave primária e auto incremento sempre ao se trabalhar com o hibernate?

Você precisar ter ao menos uma chave primária para a sua tabela e o hibernate necessita disso. Até mesmo quando se utiilza uma VIEW com hibernate é necessário declarar uma coluna com anotação @Id.

E se tratando de banco de dados não é uma boa prática criar uma tabela sem ter chave primária, nesses casos recomenda-se utilizar a PK como auto incremento.

Abraços,

[quote=jcmird]Você precisar ter ao menos uma chave primária para a sua tabela e o hibernate necessita disso. Até mesmo quando se utiilza uma VIEW com hibernate é necessário declarar uma coluna com anotação @Id.

E se tratando de banco de dados não é uma boa prática criar uma tabela sem ter chave primária, nesses casos recomenda-se utilizar a PK como auto incremento.

Abraços,[/quote]

Exatamente

A ta, não sabia dessa, sabe dizer no site do hibernate onde tem na documentação que fala sobre isso?

Vou modificar minha tabela então,colocar uma coluna id, valeu pela dica

Isso não é só do Hibernate, mas para qualquer banco de dados …