上代码:@Entity
@Table(name="T_KNOWLEDGE")
public class KnowledgeTO extends BaseTO {
    @Id
@GeneratedValue
@Column(name="ID")
    private Integer id;
@Column(name="TITLE",length=30,nullable=false)
    private String title;//标题
.....
@ManyToOne(targetEntity = Category.class,cascade={CascadeType.REFRESH})
    @JoinColumn(name = "CATEGORYID")
    private Category category;//分类}
在后台,通过jsp的传值,KnowledgeTO对象的Category属性已经有值,当然这个对象是瞬态的。之前Category的记录已经保存在数据库中了,so 这里不需要级联保存,只需要保存Knowledge的外键值。but,我在action执行save的时候,抛出异常:
object references an unsaved transient instance - save the transient exception
很明显,应该抛出异常。可是,小弟的需求是:不级联保存关联的对象(因为该对象已经保存);现在的办法是,在action中,把Category对象从数据库中get或者load以下,使之变成持久态的对象,再set给KnowledgeTO,这样就可以保存KnowledgeTO了。
如下:knowledgeTO.setContent(content);
knowledgeTO.setFamiliarity("A");
Category category=(Category)categoryService.getById(Category.class,knowledgeTO.getCategory().getId());
//Category category=(Category)categoryService.load(Category.class,knowledgeTO.getCategory().getId());
knowledgeTO.setCategory(category);
knowledgeService.save(knowledgeTO);
问题:
我必须这样做吗?能不能不get这个关联的对象(Category)。