[ 
https://issues.apache.org/jira/browse/OPENJPA-2929?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18142049#comment-18142049
 ] 

ASF subversion and git services commented on OPENJPA-2929:
----------------------------------------------------------

Commit 28a72231d90952c8756371a1c860481881cd4c71 in openjpa's branch 
refs/heads/OPENJPA-2935 from Richard Zowalla
[ https://gitbox.apache.org/repos/asf?p=openjpa.git;h=28a72231d ]

[OPENJPA-2929] Store the join value in the attributes mapped to a foreign key 
column

setJoinRefColumn() looked up the value on the referenced instance through a
field named like the referenced column, which finds nothing for an embedded
id or for id columns whose names differ from their attribute names. Store
the already computed join value of the column instead, when the attribute
type accepts it, and cover both mappings in TestCompoundRefColumn.


> Filling inverse FK columns is broken for compound keys
> ------------------------------------------------------
>
>                 Key: OPENJPA-2929
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2929
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 3.1.2, 3.2.2, 4.0.1
>            Reporter: Pawel Veselov
>            Priority: Major
>
> Say you have entity A that has a reference to entity B.
> Say entity B is identified by a compound key
> {code:java}
> @Entity
> public class A {
>   @Id
>   private long id;
>   @JoinColumns({
>       @JoinColumn(name = "b_id1", referencedColumnName = "id1"),
>       @JoinColumn(name = "b_id2", referencedColumnName = "id2")
>       })
>   private B b;
>   @Column(
>       name = "b_id1",
>       insertable = false,
>       updatable = false
>   )
>   private String bId2;
>   @Column(
>       name = "b_id2",
>       insertable = false,
>       updatable = false
>   )
>   private String bId2;
> }
> @Entity @IdClass(ID2.class)
> public class B {
>   @Id @Column("id1")
>   private String id1;
>   @Id @Column("id2")
>   private String id2;
> }
> public class ID2 {
>   private String id1;
>   private String id2;
>   public ID2() {}
>   public ID2(String id1, String id2) {
>     this.id1 = id1;
>     this.id2 = id2;
>   }
> }
> {code}
> After calling {{a.setB(b)}}, and calling {{em.persist(a)}}, the values of 
> {{a.bId1}} and {{a.bId2}} are either not set, or set to the same value, 
> either from {{b.id1}} or from {{b.id2}}.
> This is because {{RowImpl.setJoinRefColumn()}} sets values for all A’s 
> columns that point to B for every B primary key columns.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to