I'm using Hibernate tools 3.40 in Eclipse (Helios).
I'm trying to generate POJOs from my DB (MSSQL 2008) with EJB3 style (i.e. JPA2.0 annotations).
Let's say I have two tables A
and B
where there is a foreign key from A
to B
.
This generates, by default, a POJO for A
which has B
as a member (its "parent") and a POJO for B
which has a Set<A>
as a member (its "children").
What I'd like is to know how I can control the rev-eng so that only one side of the association is created (I have different use cases so basically all three options are important for me).
I do not want to use hbm.xml files as I'm working with annotations and JPA2.0 but I can specify some metadata on the reverse engineering process to hibernate via hibernae.reveng.xml
I've tried configuring the foreign-key
attribute and defining there the exclude=true
but that only provided me with a half an answer for one scenario. That generated an A
POJO with a bPK int member which is tolerable and understandable but the generated POJO of B
now does not compile as the one-to-many
annotation has an invalid attribute; The mappedby="unresolved"
due to the fact that A
no longer has a property which hibernate reveng can map back to.
So, I currently cannot create uni-directional associations and I'd appreciate any help.
Create a class for reveng. strategy
at Hibernate Code Generation Configuration
Example :
public class MyReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {
public MyReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
super(delegate);
}
@Override
public void setSettings(ReverseEngineeringSettings settings) {
super.setSettings(settings);
}
@Override
public boolean excludeForeignKeyAsCollection(String keyname,
TableIdentifier fromTable, java.util.List fromColumns,
TableIdentifier referencedTable, java.util.List referencedColumns) {
// TODO : Your work here
if (keyname.equals("___") &&
fromTable.getName().equals("___") &&
fromColumns.contains("___") &&
referencedTable.getName().equals("___") &&
referencedColumns.contains("___")) {
return true;
}
return false;
}
}
JavaDoc for method excludeForeignKeyAsCollection
Should this foreignkey be excluded as a oneToMany
and there also have another method call excludeForeignKeyAsManytoOne
Should this foreignkey be excluded as a many-to-one