JDO 应用引擎类型安全祖先查询



我正在使用带有DataNucleus JDO typesafe查询的App Engine。 是否可以使用 DataNucleus 构建类型安全的祖先查询? 例如,此应用程序引擎链接中的代码将组织称为祖先,Java 中的类型安全查询是什么?

class Organization(db.Model):
    name = db.StringProperty()
class Person(db.Model):
    given_name = db.StringProperty()
    surname = db.StringProperty()
class MainPage(webapp2.RequestHandler):
    def post(self):
        org = Organization.get_or_insert('ateam', name='ATeam')
        person = Person(parent=org)
        person.given_name='GI'
        person.surname='Joe'
        person.put()
        q = db.GqlQuery("SELECT * FROM Person WHERE ANCESTOR IS :1 ", org)
        people = []
        for p in q.run():
            people.append({'given_name': p.given_name,
                        'surname': p.surname})

是的,Datanucleus 有一个类型安全的东西,它的灵感来自QueryDSL。你可以在下面看到一个在Scala中的例子:

def querySingleRecords(jdbcDriver: String, jdbcUrl: String, username: String, password: String): Unit = {
  import javax.jdo.JDOHelper
  import scala.collection.JavaConverters._
  import org.datanucleus.api.jdo.JDOPersistenceManager
  val pu = props(jdbcDriver, jdbcUrl, username, password)
  val pmf = JDOHelper.getPersistenceManagerFactory(pu.asJava)
  val pm  = pmf.getPersistenceManager.asInstanceOf[JDOPersistenceManager]
  import model.{Identifier, QIdentifier}
  import org.datanucleus.query.typesafe.TypesafeQuery
  val tq: TypesafeQuery[Identifier] = pm.newTypesafeQuery(classOf[Identifier])
  val q: QIdentifier = QIdentifier.candidate()
  def find(symbol: String): Unit = {
    val i: Identifier =
      tq
        .filter(q.symbol.eq(symbol))
        .executeUnique()
        .asInstanceOf[Identifier]
    assert(symbol == i.symbol, s""""%s" not equal to "%s"""".format(symbol, i.symbol))
    if(debug) {
      println("%s -> %d".format(i.symbol, i.fk))
    }
  }
  find("PETR4.SA")
  find("ACIM")
  find("ZVV")
  find("AAIT")
  find("ZUMZ")
  find("AAAIF.OB")
  find("ZYXI.OB")
  find("AALC34.SA")
  find("ZURI9.SA")
}

有关使用它的完整示例,包括一个大build.sbt文件,该文件可以生成元类和运行字节码增强器的所有魔力,请查看

http://github.com/frgomes/poc-scala-datanucleus

最新更新