Hi,
I want to achieve the composite key on an entity as follows but getting error. PFA for stack trace. Values are inserting in system_user_table. When i gave the SystemUser as foreign-key reference in user table its not allowing me to save data. Composite key: ID is Long and another is String I want to make only ID with GeneratedValue. Is it possible to achieve in such a way ? Please help.
* Components as composite identifiers You cannot use an IdentifierGenerator to generate composite keys. Instead the application must assign its own identifiers. * is it true ?
* Entity Relation* *Entity SystemUser* public class SystemUser implements Serializable { private Long systemUserID; private String spaceKey; @Id @GeneratedValue(generator = "SystemUserGenerator") @GenericGenerator(name = "SystemUserGenerator", strategy = "org.hibernate.shards.id.ShardedTableHiLoGenerator") @Column(name = "system_user_id") public Long getSystemUserID() { return systemUserID; }
@Id @Column(name = "SPACE_KEY", insertable = false, updatable = false) public String getSpaceKey() { return spaceKey; }
....... ....... // hashcode and equals methods }
*Entity User* public class User implements Serializable { private Long id; private String spaceKey; private SystemUser systemUser;
@Id @GeneratedValue(generator = "UserGenerator") @GenericGenerator(name = "UserGenerator", strategy = "org.hibernate.shards.id.ShardedTableHiLoGenerator") @Column(name = "id") public Long getId() { return id; }
@ManyToOne(fetch = FetchType.LAZY) @JoinColumns({@JoinColumn(name = "SYSTEMUSER_ID", referencedColumnName = "system_user_id", columnDefinition = "bigint default 0"), @JoinColumn(name = "SPACE_KEY", referencedColumnName = "SPACE_KEY", insertable = false, updatable = false)}) public SystemUser getSystemUser() { return systemUser; }
@Id @Column(name = "SPACE_KEY", insertable = false, updatable = false) public String getSpaceKey() { return spaceKey; }
....... ....... // hashcode and equals methods }
*Save* User user = new User.Builder().setId(null).setUserName(user).setPassword(userPassword). setEmailID(email).setUserType(sType).setSystemUser(sys).setUniqueId(null). setFullName(fName).setAddress(null).setMobileNumber(null).setLandNumber(null). setCountry(null).setState(null).setCity(null).setPincode(null).setDescription(null). setStatus(type).setCreatedDate(date).setLastUpdatedDate(date).setSpaceKey(key) .setPasswordUpdatedDate(date.getTime()).build();
getHibernateTemplate().saveOrUpdate(user);
|
|