将Hibernate@manytone关联设置为Scala选项类型
有人举过在Hibernate中为@manytone关联使用包装器对象(如Scala的选项)的例子吗 谢谢 编辑: 谢谢你的建议。经过进一步思考,我开始使用私有变量,并将它们公开为scala getter/setter,它返回选项[MyType]。像这样:将Hibernate@manytone关联设置为Scala选项类型,hibernate,scala,Hibernate,Scala,有人举过在Hibernate中为@manytone关联使用包装器对象(如Scala的选项)的例子吗 谢谢 编辑: 谢谢你的建议。经过进一步思考,我开始使用私有变量,并将它们公开为scala getter/setter,它返回选项[MyType]。像这样: class EmailFolder(__parent: Option[EmailFolder] = None) { //.... default constructor etc... @ManyToOne(fetch = F
class EmailFolder(__parent: Option[EmailFolder] = None) {
//.... default constructor etc...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private[this] var _parent: EmailFolder = __parent.orNull
def parent = Option(_parent)
def parent_=(newVal:Option[EmailFolder]) = _parent = newVal.orNull
}
这是可行的,我不再需要在应用程序中使用null
--
Andreas我最初的想法是创建一个类,将其称为
选项
,将其标记为@可嵌入的
,然后为您可能要引用的对象集提供一个公共基类的引用(称之为域对象
)
但这样做意味着你可能需要放弃一些事情:
@manytone
引用。它需要是一个特定的Hibernate实体或实体层次结构:即,DomainObject
,否则Hibernate无法知道在获取时要查询哪些表@embeddeble
)。特别是,如果元素只包含null引用,那么对元素本身的引用就是null...
@ManyToOne
private MyObjectType myObjectReference;
public Option<MyObjectType> getMyObject() {
return new Option(this.myObjectReference);
}
...
。。。
@许多酮
私有MyObjectType myObjectReference;
公共选项getMyObject(){
返回新选项(this.myObjectReference);
}
...
另一个选项是不进行字段级访问,而是使用内部私有getter/setter(用于Hibernate)来处理字段,以及公共getter/setter(用于将字段封装在一个选项中以供应用程序的其余部分查看)
这里唯一的缺点是getter必须做一些实际的工作,而不是简单的POJO方法。但我认为不把冬眠搞得乱七八糟是值得的
希望这能有所帮助。我不是一个Scala爱好者,但从选项来看,您可能会尝试获得两种类型中的一种:空值与非空值(无值与某些值)或多种类型中的一种。这是哪一个?关键是@ManyToOne关系是可选的,我不想为该关联传递空值,但想使用一个选项传递一些(MyObject)或无,以确定DB值是否为空,使用自定义Hibernate用户类型来执行到/从选项(部分或无)的转换。您正在包装的类是否有一个公共基类,而不是Object或其他Java内置类?我想包装任意对象,这些对象可能用作选项中的@manytone关联,这样我就不会传递-值。另外,还要使
myObjectReference
私有
@ericacm足够公平。添加了该字段以明确它是私有的。