why does hibernate try mislay i try update/insert?
in app i have hibernate-mapped forms (general case):
class rolerule {
private purpose role;
private permissionawareentity entity; // hibernate-mapped entity assent granted
private permissiontype permissiontype; // enum
@manytoone
@joincolumn(name = "role_id")
open purpose getrole() {
relapse role;
}
open vacant setrole(role role) {
this.role = role;
}
}
class purpose {
private set<rolerule> manners = new hashset<rolerule>(0);
@onetomany(cascade=cascadetype.all)
@joincolumn(name="role_id")
open set<rolerule> getrules() {
relapse rules;
}
open vacant setrules(set<rolerule> rules) {
this.rules = rules;
}
}
all classes have equals() & hashcode() overrides.
my concentration allows tweaking roles (by sysadmins only, don't worry), among fields, allows origination new purpose rules. new order combined i try emanate new rolerule vigilant insert role's domain rules. i session.update(role) ask changes database.
now comes dizzy part... hibernate decides following shutting transaction flushing:
- insert new order database. excellent.
- update purpose fields (not collections). distant good.
- update existent rules, even zero altered them. i live this.
- update existent manners again. here's brew log, including involuntary comment:
/* mislay one-to-many quarrel role.rules */
update role_rule set role_id=null where role_id=? role_rule_id=?
of course, fields not-null, operation fails spectacularly.
can anyone try explain since hibernate this??? even some-more important, frak i around this???
edit: i certain something mapping, following boss, whim, deleted equals() hashcode() both classes, recreated controlling eclipse, mysteriously solved problem.
i'm still unequivocally extraordinary doubt though. anyone advise since hibernate this?
Comments
Post a Comment