我已經使用Hibernate 4.3.8創建了一些Hibernate映射。如何從數據庫中引用Hibernate @ManyToOne關聯
@Entity
@Table(name = ErrorEntity.TABLE_ID)
@XmlRootElement(name = ErrorEntity.XML_ROOT_TAG)
public class ErrorEntity {
/**
*
*/
private static final long serialVersionUID = 8083918635458543738L;
public static final String TABLE_ID = "Error";
public static final String ERRORCODE = "error_code";
public static final String ENV_ID = "envid";
private Integer error_code;
private Integer envId;
private EnvironmentEntity environment;
public ErrorEntity() {
}
@Id
@Column(name = ErrorEntity.ERRORCODE)
public Integer getError_code() {
return error_code;
}
public void setError_code(Integer errorcode) {
this.error_code = errorcode;
}
@Column(name = ErrorEntity.ENV_ID)
public Integer getEnvId() {
return envId;
}
public void setEnvId(Integer envId) {
this.envId = envId;
}
@ManyToOne
@JoinColumn(name = ErrorEntity.ENV_ID, referencedColumnName = EnvironmentEntity.ENV_ID, insertable = false, updatable = false)
public EnvironmentEntity getEnvironment() {
return environment;
}
public void setEnvironment(EnvironmentEntity environment) {
this.environment = environment;
}
}
正如你所看到的映射屬性ENV_ID被映射兩次。
Thisway我想我可以設置JoinColumn值而不需要查詢數據庫來獲取映射的對象,因爲我現在有JoinColumn的值。
ENV_ID的值正確寫入數據庫,但如果稍後查詢此ErrorEntity並嘗試獲取EnvironmentEntity,則引用爲空。
ErrorEntity error = (ErrorEntity) criteria.uniqueResult();
System.out.println(error.getEnvironment().getName());
getEnvironment()返回null。
任何想法如何實現這一目標?
編輯
這是工作像預計將創造與PK設定一個新的對象。
現在我有一個不起作用的特殊情況。 我需要引用另一個對象,其中joincolumn不是PK。我知道我將加入的價值是獨一無二的,但也有一些我不會加入的重複價值。
然而,Hibernate似乎無法自動映射這種關係。
ErrorEntity error = new ErrorEntity();
SignalEntity signal = new SignalEntity();
signal.setName(signalName);
error.setSignal(signal);
問題是,在這種情況下我沒有signalID(PK)。另一個想法是查詢數據庫,但那太慢了。
我試圖創建一個3列的複合PK,但這打破了另一個地方的邏輯。
是否有可能創建兩個獨立的PK?
你能發表ErrorEntity表的ddl嗎? – Balaji
envId schould被映射一次?爲什麼它被映射兩次? – sgpalit
也可以發佈EnvironmentEntity。當你做一個獲取你得到的價值getEnvId() – Balaji