Re: hibernate OneToMany composite key
On 03/12/2011 12:47 PM, comp.lang.java.programmer wrote:
I'm fairly new to hibernate and I am trying to create a Hibernate OneToMany mapping
It's using a composite key (int, int, int) on both parent and child tables.
I have tableA with column (x, y, z, name etc)
Table A contains
1, 2, 3, "tom"
I have tableB with columns (x, y, z, other etc)
Table B contains
1, 2, 3, timestamp, amount
1, 2, 3, timestamp2, amount2
1, 2, 3, timestamp3, amount3
Instead of returning one record [sic] from table A (with a set of 3 B records [sic]) when I restrict on Restrict.idEq(key)
it is returning the number of records [sic] in my "B" table ie
1,2,3,"tom",1, 2, 3, timestamp3, amount3
1,2,3,"tom",1, 2, 3, timestamp3, amount3
1,2,3,"tom",1, 2, 3, timestamp3, amount3
(It seems to only return the most recently added record in B ie timestamp3, amount3)
Before getting into the Hibernate side, there are issues with the data side,
which, by the way, you explained very incompletely. If I infer something
incorrectly you'll just have to be clearer.
You cannot have a one-to-many relationship between tables with the same key
definition. From what you said, your tables A and B are something similar to
(I use PostgreSQL syntax for an example):
CREATE TABLE "A"
(
x INT NOT NULL,
y INT NOT NULL,
z INT NOT NULL,
aname TEXT,
PRIMARY KEY (x, y, z)
);
CREATE TABLE "B"
(
x INT NOT NULL,
y INT NOT NULL,
z INT NOT NULL,
whilst TIMESTAMP NOT NULL,
amount DECIMAL (10, 2),
PRIMARY KEY (x, y, z)
);
If that structure is in play, then there cannot be three rows in table "B"
with values (1, 2, 3) for (x, y, z). Therefore it cannot be a one-to-many
relationship.
Please clarify.
--
Lew
Honi soit qui mal y pense.