2012-09-06 25 views
1

我有這個問題,我解決不了,這是我的實體類:休眠插入錯誤:這類IDS必須調用save()之前手動分配:

/** * @hibernate。類 *表= 「users.network_topic」 * @ hibernate.cache用法= 「讀 - 寫」 */ 公共類NetworkTopic實現Serializable,Idable {

/** identifier field */ 
private Long id; 

/** persistent field */ 
private Long networkId; 

/** persistent field */ 
private Long topicId; 

private UserTopic topic; 
private Network network; 

/** 
*   @hibernate.id 
*    generator-class="assigned" 
*    type="java.lang.Long" 
*    column="id" 
*/ 
public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

/** 
*   @hibernate.property 
*    type="java.lang.Long" 
*    column="network_id" 
*    not-null="true" 
*/ 
public Long getNetworkId() { 
    return networkId; 
} 

public void setNetworkId(Long networkId) { 
    this.networkId = networkId; 
} 

/** 
*   @hibernate.property 
*    type="java.lang.Long" 
*    column="user_topic_id" 
*    not-null="true" 
*/ 
public Long getTopicId() { 
    return topicId; 
} 

public void setTopicId(Long topicId) { 
    this.topicId = topicId; 
} 

/** 
*   @hibernate.set 
*    lazy="true" 
*    inverse="true" 
*    cascade="none" 
*   @hibernate.key 
*    column="user_topic_id" 
*   @hibernate.one-to-many 
*    class="com.netblue.matchpoint.domain.UserTopic" 
*   
*/ 
public UserTopic getTopic() { 
    return topic; 
} 

public void setTopic(UserTopic topic) { 
    this.topic = topic; 
} 

/** 
*   @hibernate.set 
*    lazy="true" 
*    inverse="true" 
*    cascade="none" 
*   @hibernate.key 
*    column="network_id" 
*   @hibernate.one-to-many 
*    class="com.netblue.matchpoint.domain.Network" 
*   
*/  
public Network getNetwork() { 
    return network; 
} 

public void setNetwork(Network network) { 
    this.network = network; 
} 

@Override 
public String toString() { 
    return "Network[id=" + id + "]"; 
} 

}

然後我嘗試保存新的寄存器與此代碼:

 UserTopic topic = new UserTopic(); 
     topic.setId(topicId); 
     topic.setName(ParseUtil.getString(map.get(MPConstants.TOPIC_NAME_PARAM))); 
     topic.setCreatedBy(ParseUtil.getInt(map.get(MPConstants.USER_ID))); 
     Date now = new Date(); 
     topic.setCreatedDt(now); 
     topic.setLastUpdatedDt(now); 
     topic.setStatusId(Status.ACTIVE); 
     topic.setActivityCnt(0); 
     userTopicDao.saveOrUpdate(topic); 

     UserTopicMap utm = new UserTopicMap(); 
     utm.setId(topicId); 
     utm.setMtid(topicId); 
     utm.setOtid(topicId); 
     utm.setIsDeleted(false); 
     utm.setLastUpdatedDt(now); 
     userTopicMapDao.saveOrUpdate(utm); 

     Network network = MpAuctionUtil.getNetworkById(networkId); 
     NetworkTopic networkTopic = new NetworkTopic(); 
     networkTopic.setNetworkId(networkId); 
     networkTopic.setTopicId(topicId); 
     networkTopic.setNetwork(network); 
     networkTopic.setTopic(topic); 
     LOG.debug("userTopicService addObjSubscriber x networkId="+networkId+", topicId="+topicId); 
     networkTopicDao.saveOrUpdate(networkTopic); 

最後幾行是失敗的,如果我刪除它的作品,我的意思是它可以節省主題確定,但是當我嘗試這樣做它失敗了,我不知道我是否做錯了什麼,請幫助我!

回答

0

NetworkTopic類尚未被分配一個id。您必須使用SETID方法或考慮考慮對方的ID策略

2.2.3.1. Generating the identifier property

+0

數據庫被配置爲自動生成ID,並且我認爲註釋generator-class =「assigned」負責此... – user1652761

+0

「assigned」意味着該類期望您手動分配ID。根據你在數據庫中用來生成id的內容,你可以考慮'auto','identity'和'sequence'策略。 –

0
NetworkTopic networkTopic = new NetworkTopic(); 
    networkTopic.setNetworkId(networkId); 
    networkTopic.setTopicId(topicId); 
    networkTopic.setNetwork(network); 
    networkTopic.setTopic(topic); 
    LOG.debug("userTopicService addObjSubscriber x networkId="+networkId+", topicId="+topicId); 
    networkTopicDao.saveOrUpdate(networkTopic); 

這裏的一個,你必須調用方法setId,並手動設置的值,因爲你的身份證生成器「分配」 ,這意味着在插入或更新數據之前,您必須每次手動分配!

相關問題