Ahoj.
Nez si zacnem trieskat hlavu o stenu, poprosim o radu s nasledovnym:
Mam 2 entity, jedna dedi od druhej. Chcem spravit update pomocou hql,
ale koncim na velmi podivnom sql a exception.
Samozrejme to mozem vyriesit cistym sql, ale vrta mi to v hlave a neda
mi to...
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Parent implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long parent_id;
// private string name, note, ....
}
@Entity
@PrimaryKeyJoinColumn(name="parent_id")
public class Child extends Parent implements Serializable {
private Double amount;
}
Vygenerovana schema vyzera nasledovne:
- table parent ( parent_id bigint primary key, .... )
- table child ( parent_id bigint primary key not null, amount double );
- constraint na parent_id
Tabule mam naplnene. Teraz chcem spravit update nad Child.amount.
Pouzivam springovsky hibernate template nasledovne:
Query q = sessionFactory.getCurrentSession().createQuery(
"update Child c set c.amount = c.amount + :how where
c.parent_id = :id");
q.setParameter("id", 1);
q.setParameter("how", 100);
q.executeUpdate();
Nasleduje mne nepochopitelny bordelo-sql command:
"insert into HT_Child select parenton0_.parent_id as parent_id from Child
parenton0_ inner join Material parenton0_1_ on
parenton0_.parent_id=parenton0_1_.parent_id where parent_id=?"
namiesto jednoducheho "update child set amount = amount + ? where
parent_id = ?",
nasledovany exception: jdbcsqlexception "Ambiguous column name "PARENT_ID""
Cosi podobne som vygooglil a ak to spravne chapem, je to vlastnost ( bug
), ale rad by som si overil ze nie je chyba v mojom prijimaci...
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1657
--
Diky
D