optional=true
monkeyden Oct 4, 2006 4:05 PMI'm trying to define a one-to-one bidirectional relationship in which one row may or may not exist. I thought setting optional=true (on both sides?) would allow for this but I get the following error:
Caused by: org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.xxx.entity.UserAlertsProfile#425195]
Here is the code:
@Entity
@Name("userRecord")
@Table(name = "RHTCONTACT")
@Scope(ScopeType.SESSION)
public class UserRecord implements IUserRecord, java.io.Serializable {
/**
* Retrieves the ContactKey from the entity
*/
@Id
@Length(max = 22)
@Column(name = "CONTACT_KEY", length = 22, nullable = false)
public Long getContactKey() {
return this.contactKey;
}
/**
* Sets the ContactKey of the entity
*/
public void setContactKey(Long contactKey) {
this.contactKey = contactKey;
}
/**
* @return the alertsProfile
*/
@OneToOne(optional=true, fetch=FetchType.EAGER)
@JoinColumn(name="USER_KEY", unique=true, nullable=false, updatable=false, insertable=false)
public UserAlertsProfile getAlertsProfile() {
return alertsProfile;
}
/**
* @param alertsProfile the alertsProfile to set
*/
public void setAlertsProfile(UserAlertsProfile alertsProfile) {
this.alertsProfile = alertsProfile;
}
...
}
@Entity
@Name("alertsprofile")
@Table(name = "USER_PROFILE_ALERTS")
public class UserAlertsProfile implements java.io.Serializable {
/**
* Retrieves the UserKey from the entity
*/
@Id
@Length(max = 22)
@Column(name = "USER_KEY", length = 22, nullable = false)
public Long getUserKey() {
return this.userKey;
}
/**
* Sets the UserKey of the entity
*/
public void setUserKey(Long userKey) {
this.userKey = userKey;
}
/**
* @return the userRecord
*/
@OneToOne(optional=true, mappedBy="accountInfo")
public UserRecord getUserRecord() {
return userRecord;
}
/**
* @param userRecord the userRecord to set
*/
public void setUserRecord(UserRecord userRecord) {
this.userRecord = userRecord;
}
}Thanks for suggestions.