标签: objectify

Google App Engine 模块可以像 Maven 模块一样共享源代码吗?

我正在使用 Google App Engine 创建一个由多个Google Modules组成的项目。如何设置我的项目(使用 Maven),以便我可以跨模块共享源代码,例如 Objectify 对象模型定义、共享实用程序代码和单元测试代码?

我希望答案很简单,并且我可以按照以下答案中的建议使用 Maven:

但是,我担心 Google App Engine 模块可能有一些特殊之处,使它们与 Maven 模块不同。然后也许上面的方法行不通。

作为我担心的一个例子,请注意Google 说“虽然 Java EE 支持 WAR 文件,但模块配置仅使用解压的 WAR 目录。” 然而,上面给出的一些解决方案建议将共享代码打包到 JAR 文件中。我意识到 WAR 和 JAR 是不同的,但我担心我会浪费时间尝试做一些不能工作的事情。

关于如何在 Google App Engine 模块之间共享代码的任何建议?

java eclipse google-app-engine maven objectify

5
推荐指数
1
解决办法
1096
查看次数

按“键”字段过滤 Objectify 查询

我有以下 Objectify 关系:

@Entity(“Author”)
public class Author{
  @Id
  private long authorId;
  …

}

@Entity(“Book”)
public class Book{
  @Id
  private long id;
  private Key<Author> authorKey;
  …

}
Run Code Online (Sandbox Code Playgroud)

现在是有趣的部分:我有authorId(id,不是实体),我需要为该作者查询 Book。我的查询在下面,但它返回一个空列表,而我知道该作者在数据存储区中有书籍。那么我该如何解决这个查询呢?

public static List<Book> getBooksForAuthor(Long authorId) {
    Key<Author> authorKey = Key.create(Author.class, authorId);
    return OfyService.ofy().load().type(Book.class).filter("authorKey", authorKey).order(“-date").list();
  }
Run Code Online (Sandbox Code Playgroud)

google-app-engine filter objectify google-cloud-endpoints google-cloud-datastore

5
推荐指数
0
解决办法
1707
查看次数

如何在android中具有一对一或一对多关系的objectify实体中插入记录

我有如下类 City 的模型:

@Entity
public class City {
    @Id
    Long id;
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
Run Code Online (Sandbox Code Playgroud)

我有另一个模型类 Person 下面给出:

@Entity
public class Person {
    @Id
    Long id;
    String name;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
    Key<City> city;
}
Run Code Online (Sandbox Code Playgroud)

之后,我使用 android studio 为这两个类生成端点并部署它。

这是生成的端点的代码:

个人端点

@Api(
        name = "personApi",
        version = "v1",
        resource = "person", …
Run Code Online (Sandbox Code Playgroud)

google-app-engine android objectify google-cloud-endpoints google-cloud-datastore

5
推荐指数
1
解决办法
797
查看次数

在Google App Engine数据模型中进行"OR"查询

我想做一个像这样的查询"从Person where Address ="中选择名称"OR age =""".这在GAE模型中是否可行.所有东西都包括AND封闭而不是OR.我怎么能用JDO/JPA,Objectify做到这一点.提前致谢

google-app-engine objectify

4
推荐指数
1
解决办法
2540
查看次数

Objectify NoClassDefFoundError

所以我刚刚使用Google Eclipse插件在Eclipse Indigo中创建了一个新的GAE项目,我只有以下servlet:

public class TestServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().println("Hello, world");

        Objectify obj = ObjectifyService.begin();
        System.out.println(obj);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我在浏览器上运行servlet时,我得到:

java.lang.NoClassDefFoundError: com/googlecode/objectify/ObjectifyService
    at com.fer.TestServlet.doGet(TestServlet.java:17)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:78)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:369)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at …
Run Code Online (Sandbox Code Playgroud)

java google-app-engine noclassdeffounderror objectify

4
推荐指数
1
解决办法
1893
查看次数

在客体化中使用"IN"查询

如何在客体化中使用"IN"查询?我有一个'纸'实体和一个不同的实体'附表'.在'附表'中我有纸的关键.现在我使用一些标准获得了"纸"的几个键.现在我想用'scheduledDate'来过滤那些.我要查询"日程"像这样的东西:get 'schedule' from 'Schedule' where 'paper key' in (List of paper keys) and 'scheduledDate' = 'some date'.如何在物化中做到这一点?谢谢

java google-app-engine objectify

4
推荐指数
1
解决办法
2465
查看次数

Objectify 4过滤器无法正常工作

我正在尝试做一个简单的JUnit测试来执行这样的查询:

Resource result = ofy().load().type(Resource.class).filter("raw =", 
    "/Bob/-/userId/-/").first().get(); 
if (result != null){
    System.out.println("Resulting Resource raw =" + result.getRaw());
} 
Run Code Online (Sandbox Code Playgroud)

上面的查询结果null,但是当我使用id(Long类型)进行查询时,我得到了结果.当我坚持我正在尝试查询的实体时,我记录了@Id并且值是1,所以我做了一个查询id用于检查:

Resource result = 
    ofy().load().type(Resource.class).filter("id =", 1).first().get(); 
if (result != null){
    System.out.println("Resulting Resource raw =" + result.getRaw());
}
Run Code Online (Sandbox Code Playgroud)

结果result.getRaw()/Bob/-/userId/-/真的很奇怪,从我的第一次查询结果应该没有null

java google-app-engine objectify

4
推荐指数
1
解决办法
1575
查看次数

即使现在,Objectify也不会同步存储

我的servlet应该执行以下操作:当用户在场地注册时,我会检查他当前是否在某处注册(即使它是同一地点),如果是,请取消注册并再次注册.

我有以下代码,为了显示我的问题,我已经简化了:

    Date tempDate = new Date();


    Visit v = ofy().load().type(Visit.class)
            .filter(Visit.USER_ID, 5L)
            .filter(Visit.EXIT_DATE, null).first().get();

    if(v != null)
        exitVenue(5L, 7L, tempDate);

    Visit visit = new Visit(5L, 7L, tempDate);      
    ofy().save().entity(visit).now();

    Date tempDate2 = new Date();


    Visit v2 = ofy().load().type(Visit.class)
            .filter(Visit.USER_ID, 5L)
            .filter(Visit.EXIT_DATE, null).first().get();

    if(v2 != null)
        exitVenue(5L, 7L, tempDate2);

    Visit visit2 = new Visit(5L, 7L, tempDate2);        
    ofy().save().entity(visit2).now();
}


public void exitVenue(Long userID, Long venueID, Date exitDate) {

    Visit visit = ofy().load().type(Visit.class)
            .filter(Visit.USER_ID, userID)
            .filter(Visit.VENUE_ID, venueID)
            .filter(Visit.EXIT_DATE, null).first().get();

    if(visit == null){
        log.info("ERROR …
Run Code Online (Sandbox Code Playgroud)

google-app-engine persistence objectify google-cloud-datastore

4
推荐指数
1
解决办法
1582
查看次数

使用不等数过滤器对多个数据存储区属性进行Objectify/datastore查询

我正在尝试使用谷歌应用引擎数据库,我需要在2个日期范围内获得员工的总薪水.我需要提供小时的范围,即startDate和endDate,以便我如何在数据存储上执行此操作.我在app引擎数据存储区中使用objectify.

java google-app-engine objectify google-cloud-datastore

4
推荐指数
1
解决办法
1718
查看次数

在基于Android-Studio的项目中为AppEngine创建复合索引

我使用Android Studio创建了Android项目及其后端AppEngine端点对应项.我有一个数据存储区,我正在使用Objectify.系统工作得很好,直到我在查询中添加了一个过滤器(仅显示特定的给定电子邮件).

Query<Report> query = ofy().load().type(Report.class).filter("email", user.getEmail()).order("email").order("-when").limit(limit);
Run Code Online (Sandbox Code Playgroud)

这是POJO数据存储区实体:

@Entity
public class Report {
    @Id
    Long id;

    String who;

    @Index
    Date when;

    String what;

    @Index
    String email;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试测试时,我从Google API Explorer收到此类错误:

com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.
The suggested index for this query is:
    <datastore-index kind=\"AccessReport\" ancestor=\"false\" source=\"manual\">
    <property name=\"email\" direction=\"asc\"/>
    <property name=\"when\" direction=\"desc\"/>
    </datastore-index>
Run Code Online (Sandbox Code Playgroud)

据我所知,我只需要创建一个复合索引,包括特定字段的电子邮件和时间,以及它们的特定排序方向.

但是,我找到的大多数文档都告诉我编辑datastore-indexes.xml.

App Engine预定义实体的每个属性的简单索引.App Engine应用程序可以在名为datastore-indexes.xml的索引配置文件中定义更多自定义索引,该文件在应用程序的/ war/WEB-INF/appengine生成的目录中生成.

不幸的是,这个文件似乎并不存在于我的项目中.

是否有人熟悉使用Android Studio时改变这种情况的方法?

google-app-engine objectify google-cloud-endpoints google-cloud-datastore android-studio

4
推荐指数
1
解决办法
513
查看次数