Hello,
I stuck with problem when I try to use @ElementCollection join to Map with
@JoinColumn, which is not a primary key. When I try to update a Map,
JoinColumn value becomes null and Eclipselink return with error.
My entity:
---------------- 
@Entity
@Table(name = "cust")
public class Customer implements Serializable {
   private static final long serialVersionUID = 1L;
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "id")
   private Long id;
   @Column(name = "name")
   private String name;
   @Column(name = "address", nullable = false)
   private String address;
   @ElementCollection
   @CollectionTable(name = "address_info",
       joinColumns = {
           @JoinColumn(name = "x_address", referencedColumnName =
"address")
   })
   @MapKeyColumn(name = "info_tag")
   @Column(name = "info_value")
   private Map<String, String> extInfo;
   public Customer() {
       extInfo = new HashMap<String, String>();
   }
   public Customer(String name, String address) {
       this();
       this.name = name;
       this.address = address;
   }
   ...Getters and setters
}
Code:
------------- 
Customer cust = new Customer("My Customer", "Arctic");
em.persist(cust);
em.flush();
em.refresh(cust);
cust.setInfo("postIndex", "12345");
Error log:
------------- 
FINE: INSERT INTO cust (address, name) VALUES (?, ?)
       bind => [Arctic, My Customer]
FINE: SELECT LAST_INSERT_ID()
FINE: SELECT id, address, name FROM cust WHERE (id = ?)
       bind => [1]
FINE: SELECT t0.info_value, t0.info_tag FROM address_info t0 WHERE
(t0.x_address = ?)
       bind => [Arctic]
FINE: INSERT INTO address_info (x_address, info_value, info_tag) VALUES 
(?,
?, ?)
       bind => [null, 12345, postIndex]
FINE: SELECT 1
WARNING: Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services -
2.0.0.v20091127-r5931): 
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
Column 'x_address' cannot be null
Error Code: 1048
Call: INSERT INTO address_info (x_address, info_value, info_tag) VALUES 
(?,
?, ?)
       bind => [null, 12345, postIndex]
Query: DataModifyQuery(sql="INSERT INTO address_info (x_address, 
info_value,
info_tag) VALUES (?, ?, ?)")
When I remove em.flush() and em.refresh(cust), everything works fine, 
until
next transaction, when I try to find inserted entity and make an update to
Map, error returns. If I change JoinColumn to use entity's ID, problem
disappears. Why I can't use JoinColumn, different from ID column?
Thanks
--
View this message in context: 
http://old.nabble.com/Error-in-Eclipselink-with-%40ElementCollection-Map-and-%40JoinColumn-tp27849535p27849535.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users