2015-08-20 113 views
1

我有實體類同設置@ManyToOne或者@OneToOne關係,而不實際獲取相關實體

@Entity 
@Table(name = "Template") 
public class Template implements java.io.Serializable { 
     Script script; 

     @OneToOne(fetch = FetchType.LAZY) 
     @JoinColumn(name = "SCRIPTID") 
     public Script getScript() { 
      return script; 
     } 

     public void setScript(Script script) { 
      this.script= script; 
     } 
} 

其中Script是另一個實體。

當我要救Template,我得到的Script ID從一些舊代碼,所以我的儲蓄代碼:

Long scriptId = createNewScript(....); 
Script script = commonDao.findByPrimaryKey(Script.class, scriptId); //unnecessary reading 
template.setScript(script); 

commonDao.save(template); 

的問題是,我必須做無謂的只讀的Script將其設置在Template。有沒有辦法只設置腳本的ID,但仍然有返回Script的getter。

+0

我不認爲是有,因爲template.getScript();僅當腳本處於持久狀態或存在於數據庫中時纔會返回腳本,或者您已將其設置爲不將其持久保存到數據庫中,我的意思是:template.setScript(script)。 – jfun

回答

1

是的,有一種方法。

休眠允許你做這樣的事情:

template.setScript(new Script()); 
template.getSCript().setId(scriptId); 
commonDao.save(template); 
+0

嗨弗拉德,請你看看我的帖子 - http://stackoverflow.com/questions/32080681/how-to-configure-enhanced-tablegenerator-in-hibernate – user3181365