JoinColumn name not used in sql

Posted by Vladimir on Stack Overflow See other posts from Stack Overflow or by Vladimir
Published on 2010-04-28T11:59:08Z Indexed on 2010/04/28 12:03 UTC
Read the original article Hit count: 267

Filed under:
|
|
|

Hi!

I have a problem with mapping many-to-one relationship without exact foreign key constraint set in database. I use OpenJPA implementation with MySql database, but the problem is with generated sql scripts for insert and select statements.

I have LegalEntity table which contains RootId column (among others). I also have Address table which has LegalEntityId column which is not nullable, and which should contain values referencing LegalEntity's "RootId" column, but without any database constraint (foreign key) set.

Address entity is mapped:


@Entity
@Table(name="address")
public class Address implements Serializable {
    ...

    @ManyToOne(fetch=FetchType.LAZY, optional=false)
    @JoinColumn(referencedColumnName="RootId", name="LegalEntityId", nullable=false, insertable=true, updatable=true, table="LegalEntity")
    public LegalEntity getLegalEntity() {
        return this.legalEntity;
    }
}

SELECT statement (when fetching LegalEntity's addresses) and INSERT statment are generated:

SELECT t0.Id, .., t0.LEGALENTITY_ID FROM address t0 WHERE t0.LEGALENTITY_ID = ? ORDER BY t0.Id DESC [params=(int) 2]

INSERT INTO address (..., LEGALENTITY_ID) VALUES (..., ?) [params=..., (int) 2]

If I omit table attribute from mentioned statements are generated:

SELECT t0.Id, ... FROM address t0 INNER JOIN legalentity t1 ON t0.LegalEntityId = t1.RootId WHERE t1.Id = ? ORDER BY t0.Id DESC [params=(int) 2]

INSERT INTO address (...) VALUES (...) [params=...]

So, LegalEntityId is not included in any of the statements.

Is it possible to have relationship based on such referencing (to column other than primary key, without foreign key in database)? Is there something else missing?

Thanks in advance.

© Stack Overflow or respective owner

Related posts about jpa

Related posts about openjpa