Hibernate Foreign Key Name Generator
Changing the generated name of a foreign key in Hibernate. My UserDetails class has a one-to-one mapping with the Entitity class Vehicle. Hibernate creates the 2 tables and assigns a generic Foreign Key, which maps the vehicleid column (UserDetails table.) to the primary key vehicleId (Vehicle table).
Am trying to do 'one to one' mapping with hibernate entities. Student table has contactinfo as a foreign key reference. When i save the student object, foreign key sets as NULL. Here i have atta. To govern this process Hibernate ™ uses a reverse engineering strategy. A reverse engineering strategy is mainly called to provide more Java like names for tables, column and foreign keys into classes, properties and associations. It is also used to provide mappings from SQL types to Hibernate ™ types. The strategy can be customized by the user. Generator classes in hibernate are used to generate the primary key ids, the types we have sequence, identity, increment, hilo, native and foreign and uuid generators. Here we discussed hilo generator formula in detaild explanation. Hibernate generator classes have been used to generating the primary key.
Date: January 20, 2006 03:06AM
I'm posting a Hibernate problem here because nobody could help me solve my problem at forum.hibernate.org. I've tried google, and the Hibernate manual too, and I've tried all sorts of workarounds , without any luck! - So I was hoping, someone here could give me some advice. Anyway here's the reason for my post:
(Using Hibernate 3.1 and MySQL 4.1.14 on SuSE 9.2)
I've got 2 Tables: Parent and Child:
CREATE TABLE `parent` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `child` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(30) default NULL,
`parent_id` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`),
CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Here are my Mapping Files for:
Parent:
<hibernate-mapping>
<class name='entities.Parent' table='parent' >
<id name='id' column='id' unsaved-value='-1' type='long'>
<generator/>
</id>
<property name='name' />
<set name='children' inverse='true' cascade='all'>
<key column='parent_id' not-null='true' />
<one-to-many />
</set>
</class>
</hibernate-mapping>
and Child:
<hibernate-mapping>
<class name='entities.Child' table='child'>
<id name='id' column='id' unsaved-value='-1' type='long'>
<generator/>
</id>
<property name='name' />
<property name='parent_id' not-null='true' />
</class>
</hibernate-mapping>
When I load a Parent all works fine, and hibernate populates all the Child Objects associated with the Parent, and adds them to the HashSet.
But when I try to create a new Parent and add new Children to the Parent, I get the following error:
org.hibernate.exception.ConstraintViolationException: could not insert: [entities.Child]
and...
Caused by: java.sql.SQLException: Cannot add or update a child row: a foreign key constraint fails
Here's my Java Code for the parent and child classes:
package entities;
public class Child {
private String name = null;
private long id = -1;
private long parent_id= -1;
public long getParent_id() {
return parent_id;
}
public void setParent_id(long parent_id) {
this.parent_id = parent_id;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package entities;
import java.util.Set;
public class Parent {
private String name = null;
private long id = -1;
private Set children = null;
public Set getChildren() {
return children;
}
public void setChildren(Set children) {
this.children = children;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
this is what I do when I try to create and save a new Parent with new Children:
Session session = SessionManager.getSessionFactory().getCurrentSession();
session.beginTransaction();
Parent p= new Parent();
p.setName('mom');
Child c = new Child();
c.setName('kid1');
p.setChildren(new HashSet());
p.getChildren().add(c);
session.save(p);
session.getTransaction().commit();
Apparently to me, Hibernate doesn't know the Parents id at the time of saving and therefore cant set the foreign key of the Parent_id in the Child table. But how to I tell Hibernate that it should update this foreign key?
This problem has been haunting me for days now, and I cant solve it on my own. Maybe someones got some helpful hints on how to solve this problem.
Hibernate Foreign Key Name Generator Download
Unique Key
Mysql Foreign Key Constraint
Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.