我使用Hibernate Annotations 3.4.0在Scala 2.8.0中构建了一些带注释的域类.它一直工作正常,只是有一些注释将数组作为参数.例如,这是我想在Scala中表达的Java注释:
@OneToMany(mappedBy="passport_id", cascade=CascadeType.PERSIST)
Run Code Online (Sandbox Code Playgroud)
但是,注释需要数组/集作为输入:
[ERROR] .../Passport.scala:50: error: type mismatch;
[INFO] found : javax.persistence.CascadeType(value PERSIST)
[INFO] required: Array[javax.persistence.CascadeType]
[INFO] @OneToMany(mappedBy="passport_id", cascade=CascadeType.PERSIST)
Run Code Online (Sandbox Code Playgroud)
我尝试了各种括号,方形/角度/花括号等,以此类推:
@OneToMany(mappedBy="passport_id", cascade=(CascadeType.PERSIST))
@OneToMany(mappedBy="passport_id", cascade=[CascadeType.PERSIST])
@OneToMany(mappedBy="passport_id", cascade=<CascadeType.PERSIST>)
@OneToMany(mappedBy="passport_id", cascade={CascadeType.PERSIST})
Run Code Online (Sandbox Code Playgroud)
...但不幸的是,我已经完成了对Scala/Java注释的理解.感谢帮助.
我想创建一个这样的文档:
<root/>
Run Code Online (Sandbox Code Playgroud)
我可以以编程方式添加子项.从理论上讲,它看起来像这样:
val root_node_name = "root"
val doc = <{root_node_name}/>
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用:
error: not found: value <
Run Code Online (Sandbox Code Playgroud)
所以,我试过的是这样的:
val root_node_name = "root"
val doc = new scala.xml.Elem(null, root_node_name, null, scala.xml.TopScope, null)
Run Code Online (Sandbox Code Playgroud)
编译,但在运行时我得到这个空指针异常:
java.lang.NullPointerException
at scala.xml.Utility$.toXML(Utility.scala:201)
at scala.xml.Utility$$anonfun$sequenceToXML$2.apply(Utility.scala:235)
at scala.xml.Utility$$anonfun$sequenceToXML$2.apply(Utility.scala:235)
at scala.Iterator$class.foreach(Iterator.scala:414)
at scala.runtime.BoxedArray$AnyIterator.foreach(BoxedArray.scala:45)
at scala.Iterable$class.foreach(Iterable...
Run Code Online (Sandbox Code Playgroud)
我正在使用Scala 2.8.有关如何解决此问题的任何示例?谢谢.
我开始使用后端使用Hibernate(JPA)的Scala应用程序.为了加载一个对象,我使用这行代码:
val addr = s.load(classOf[Address], addr_id).asInstanceOf[Address];
Run Code Online (Sandbox Code Playgroud)
不用说,这有点痛苦.我写了一个helper类,看起来像这样:
import org.hibernate.Session
class DataLoader(s: Session) {
def loadAddress(id: Long): Address = {
return s.load(classOf[Address], id).asInstanceOf[Address];
}
...
}
Run Code Online (Sandbox Code Playgroud)
所以,现在我可以这样做:
val dl = new DataLoader(s)
val addr = dl loadAddress(addr_id)
Run Code Online (Sandbox Code Playgroud)
这是一个问题:如何编写一个通用的参数化方法,可以使用相同的模式加载任何对象?即
val addr = dl load[Address](addr_id)
Run Code Online (Sandbox Code Playgroud)
(或类似的规定.)
我是Scala的新手所以请原谅任何特别可怕的东西.