L
Lionel
This may be a little off topic but I'm sure there are some experts in here.
I'm having some troubles getting using a foreign key as a primary key.
In this post I will use the most simple issue I'm having trouble with.
Here's some snippets (pharmacy project):
public abstract class AbstractDrugModel
{
private String name;
private IntravascularDrug ivDrug;
}
public class IntravascularDrug
{
private AbstractDrugModel drug;
}
Note 1: I am only just introducing hibernate, previously I did the
databases manually and in that scenario IntravascularDrug did not
contain an AbstractDrugModel instance.
Note 2: ivDrug can be null.
In my mapping files I have (at this point in time, I've tried other
approaches):
<hibernate-mapping>
<class
lazy="false"
name="tciworks.drugmodel.IntravascularDrug"
table="IntravascularDrug">
<composite-id>
<key-many-to-one name="drug" column="DrugName"/>
</composite-id>
...
</class>
</hibernate-mapping>
<hibernate-mapping>
<class
dynamic-insert="false"
dynamic-update="false"
lazy="false"
mutable="true"
name="tciworks.drugmodel.AbstractDrugModel"
optimistic-lock="version"
polymorphism="implicit"
select-before-update="false"
table="Drug">
<id column="Name" name="name"/>
<discriminator column="DrugModelType"/>
...
<many-to-one
cascade="all"
column="DrugName"
name="intravascularDrug"
not-null="false"
unique="true"/>
<subclass
discriminator-value="USER_DEFINED"
name="tciworks.drugmodel.userdefined.UserDefinedDrugModel"/>
</class>
</hibernate-mapping>
This example includes only one concrete sub-class of AbstractDrugModel,
there are others. Drug name is unique hence being used as PK.
When I have Hibernate create the database tables everything appears
fine, but on save, it seems to be saving IntravascularDrug first and
hence gives the following error:
Sun Aug 07 21:03:25 EST 2011: ERROR logExceptions, Cannot add or update
a child row: a foreign key constraint fails
(`tciworkssqlextension`.`intravasculardrug`, CONSTRAINT
`FK19E96D413937CB47` FOREIGN KEY (`DrugName`) REFERENCES `drug` (`Name`))
Does anyone have any suggestions on how I should do this?
Thanks
Lionel.
I'm having some troubles getting using a foreign key as a primary key.
In this post I will use the most simple issue I'm having trouble with.
Here's some snippets (pharmacy project):
public abstract class AbstractDrugModel
{
private String name;
private IntravascularDrug ivDrug;
}
public class IntravascularDrug
{
private AbstractDrugModel drug;
}
Note 1: I am only just introducing hibernate, previously I did the
databases manually and in that scenario IntravascularDrug did not
contain an AbstractDrugModel instance.
Note 2: ivDrug can be null.
In my mapping files I have (at this point in time, I've tried other
approaches):
<hibernate-mapping>
<class
lazy="false"
name="tciworks.drugmodel.IntravascularDrug"
table="IntravascularDrug">
<composite-id>
<key-many-to-one name="drug" column="DrugName"/>
</composite-id>
...
</class>
</hibernate-mapping>
<hibernate-mapping>
<class
dynamic-insert="false"
dynamic-update="false"
lazy="false"
mutable="true"
name="tciworks.drugmodel.AbstractDrugModel"
optimistic-lock="version"
polymorphism="implicit"
select-before-update="false"
table="Drug">
<id column="Name" name="name"/>
<discriminator column="DrugModelType"/>
...
<many-to-one
cascade="all"
column="DrugName"
name="intravascularDrug"
not-null="false"
unique="true"/>
<subclass
discriminator-value="USER_DEFINED"
name="tciworks.drugmodel.userdefined.UserDefinedDrugModel"/>
</class>
</hibernate-mapping>
This example includes only one concrete sub-class of AbstractDrugModel,
there are others. Drug name is unique hence being used as PK.
When I have Hibernate create the database tables everything appears
fine, but on save, it seems to be saving IntravascularDrug first and
hence gives the following error:
Sun Aug 07 21:03:25 EST 2011: ERROR logExceptions, Cannot add or update
a child row: a foreign key constraint fails
(`tciworkssqlextension`.`intravasculardrug`, CONSTRAINT
`FK19E96D413937CB47` FOREIGN KEY (`DrugName`) REFERENCES `drug` (`Name`))
Does anyone have any suggestions on how I should do this?
Thanks
Lionel.