在anorm中使用"in"子句似乎并不容易:
val ids = List("111", "222", "333")
val users = SQL("select * from users where id in ({ids})").on('ids-> ???).as(parser *)
Run Code Online (Sandbox Code Playgroud)
如何更换???
零件?
我试过了:
on('ids -> ids)
on('ids -> ids.mkString("'","','","'"))
on('ids -> ids.mkString("','")
Run Code Online (Sandbox Code Playgroud)
但都没有效果.
我在讨论中看到了完全相同的问题:https://groups.google.com/d/topic/play-framework/qls6dhhdayc/discussion,作者有一个复杂的解决方案:
val params = List(1, 2, 3)
val paramsList = for ( i <- 0 until params.size ) yield ("userId" + i)
// ---> results in List("userId0", "userId1", "userId2")
User.find("id in ({%s})"
// produces "id in ({userId0},{userId1},{userId2})"
.format(paramsList.mkString("},{"))
// produces Map("userId0" -> …
Run Code Online (Sandbox Code Playgroud) 我想按照本教程中的示例来讨论scala中的反射(2.10.2) .当我启动sbt(版本0.13)并导入scala.refelct.runtime.universe._时工作正常
scala> import scala.reflect.runtime.universe._ ?~
import scala.reflect.runtime.universe._
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将示例代码放到像这样的对象时
object ReflectExample {
import scala.reflect.runtime.universe._
/*
the rest of the Example
*/
}
Run Code Online (Sandbox Code Playgroud)
并通过sbt compile编译代码我看到以下错误消息:
[error] object runtime is not a member of package reflect
[error] import scala.reflect.runtime.universe._
Run Code Online (Sandbox Code Playgroud) 我们有早期的经验和许多可重用的代码/组件,主要使用Spring MVC,Hibernate,PostgreSQL数据库完成.
但最近我们计划开始一个新项目.我们决定在Scala中使用Play框架.我们是Scala的Play框架的新手.因此,我们无法决定使用什么ORM(对象关系映射)框架.由于许多可重用的代码,我们希望选择Hibernate.
我们发现关于Hibernate的可怕单词是"在Scala中使用Hibernate的JPA,它可能不是最好的方式,它应该被视为遗留和弃用".我们真的很困惑用什么?
在寻找可能性时,我们发现了Anorm和Hibernate.可能存在一些其他框架,我们还不知道.
那么请建议我们使用Scala和PostgreSQL的Play框架使用什么?
提前致谢!
我最近开始研究游戏和反应性mongo.引用了响应式mongo文档来创建SimpleAlbum.当我运行播放应用程序时,我收到一个错误,如"隐式修饰符不能用于顶级对象".我为什么要这个?帮助我解决问题.谢谢
package models
import org.joda.time.DateTime
import reactivemongo.bson._
case class SimpleAlbum(
title: String,
releaseYear: Int,
hiddenTrack: Option[String],
allMusicRating: Option[Double])
implicit object SimpleAlbumWriter extends BSONDocumentWriter[SimpleAlbum] {
def write(album: SimpleAlbum): BSONDocument = BSONDocument(
"title" -> album.title,
"releaseYear" -> album.releaseYear,
"hiddenTrack" -> album.hiddenTrack,
"allMusicRating" -> album.allMusicRating)
}
implicit object SimpleAlbumReader extends BSONDocumentReader[SimpleAlbum] {
def read(doc: BSONDocument): SimpleAlbum = {
SimpleAlbum(
doc.getAs[String]("title").get,
doc.getAs[Int]("releaseYear").get,
doc.getAs[String]("hiddenTrack"),
doc.getAs[Double]("allMusicRating"))
}
}
Run Code Online (Sandbox Code Playgroud) 我尝试在IntellijIdea中打开Maven项目.这个项目使用spark和scala.当我跑:
mvn clean install -DskipTests
Run Code Online (Sandbox Code Playgroud)
然后它给出错误:
[错误]无法执行目标org.scalastyle:scalastyle-maven-plugin:0.7.0:检查(默认)项目spark-mllib_2.10:在scalastyle执行期间失败:您有50个Scalastyle违规(s)
我认为问题出在Maven的版本中.确实在IntellijIdea设置中我有版本Bundled(Maven 3)3.0.5,而pom.xml定义<maven.version>3.3.3</maven.version>
如果我mvn -version
在终端运行,它指向Maven 3.3.3
那么,我如何更新IntellijIdea使用的Maven版本?
我正在使用Anorm 2.5和以下代码段:
import anorm.SqlParser._
import anorm._
// Not really needed, but to be sure
import anorm.JavaTimeToStatement
import anorm.JavaTimeParameterMetaData
import anorm.JavaTimeColumn
val localDate = java.time.LocalDate.of(2015, 9, 25)
val value = SQL"""SELECT id FROM table WHERE date = $localDate;""".as(get[Long]("id").singleOpt)
Run Code Online (Sandbox Code Playgroud)
产生此错误:
found : java.time.LocalDate
[error] required: anorm.ParameterValue
[error] date = $localDate
Run Code Online (Sandbox Code Playgroud)
根据changelog,anorm 2.5实际上应该支持java.time.LocalDate转换.有人可以帮忙吗?在我看来,java.time.LocalDate支持不起作用.
我正在尝试实现一个scala函数对象(具体来说 - 与apache spark一起使用)
等效的java类型是scala.Function0
(对于参数少的函数)
除了实现业务逻辑的方法apply()
,我看到我必须实现其他几个方法.
简单的谷歌搜索方法名称没有帮助(我看到了关于tag
应该实现的方法的参考- 但这里的方法名称是不同的.
这是使用这些方法的代码(使用空实现).
private static class functionObject implements Function0<Integer>{
@Override
public Integer apply() {
// TODO Auto-generated method stub
return null;
}
@Override
public byte apply$mcB$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public char apply$mcC$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double apply$mcD$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public float apply$mcF$sp() {
// TODO …
Run Code Online (Sandbox Code Playgroud) 我正在尝试Play 2.4.2 for Scala,我不清楚控制器是应该定义为类还是单例.文档说明:
Controller只不过是一个生成Action值的单例对象.
但是代码示例显示:
class Application extends Controller { ... }
Run Code Online (Sandbox Code Playgroud)
为了进一步复杂化,如果我定义一个类,intellij会给我一个警告:
但是,如果我使用单例,我会收到编译错误(但没有警告):
package controllers
import play.api._
import play.api.mvc._
object Application extends Controller { ... }
Run Code Online (Sandbox Code Playgroud)
错误:(6,-1)播放2编译器:/ Users/Toby/IdeaProjects/play-scala/conf/routes:6:type应用程序不是包控制器的成员
哪种方法是正确的?
我有一组从一个特征继承的case对象,如下所示:
sealed trait UserRole
case object SuperAdmin extends UserRole
case object Admin extends UserRole
case object User extends UserRole
Run Code Online (Sandbox Code Playgroud)
我想将其序列化为JSON,我只使用了Format机制:
implicit val userRoleFormat: Format[UserRole] = Json.format[UserRole]
Run Code Online (Sandbox Code Playgroud)
但不幸的是,编译器不满意,它说:
No unapply or unapplySeq function found
Run Code Online (Sandbox Code Playgroud)
我的案例对象出了什么问题?
我试图在使用Slick的"服务"层中模拟数据库,以便在其中单元测试操作组合.
不幸的是我无法模仿db和JdbcProfile
Mockito.特别是我无法JdbcProfile#API
在这些代码行中进行模拟:
import driver.api._
val dbConfig = databaseConfigProvider.get[JdbcProfile]
Run Code Online (Sandbox Code Playgroud)
你知道一个更好的策略来单元测试Slick(我不想使用Acolyte)吗?
scala ×9
anorm ×2
hibernate ×1
implicit ×1
java ×1
maven ×1
mocking ×1
persistence ×1
play-json ×1
postgresql ×1
reflection ×1
slick ×1
unit-testing ×1