标签: ebean

用"or"或"and"连接两个expressionList

我在使用"或"加入2 expressionList时遇到了一些麻烦.这是我正在做的一个例子:

RelationGroup prg =...
ExpressionList<User> exp = User.find.where();
List<ExpressionList<User>> expressions = new ArrayList<ExpressionList<User>>()
List<String> relations = new ArrayList<String>()

while(prg != null){

    if(prg.prevGroupRelation != null)
        relations.add(prg.prevGroupRelation);

    for(RelationAtt pra : prg.prAtt){
        if(pra.rel.equals("eq"))
            exp = exp.eq(pra.name, pra.value1 );
        else if(pra.rel.equals("lt"))
            exp = exp.lt(pra.name,   pra.value1);
        else if(pra.rel.equals("gt"))
            exp = exp.gt(pra.name,  pra.value1);
        else if(pra.rel.equals("bw"))
            exp = exp.gt(pra.name,  pra.value1).lt(pra.name,  pra.value2);
    }

    expression.add(exp);
    prg=prg.nextPRG();
    exp = new ExpressionList<User>(); 
}

for(i=0;i<expressions.count-1; i++)
    if(relations[i].equals("or")){
        //ToDo: (expressions[i]) or (expressions[i+1])                      
    }else{
        //ToDo: (expressions[i]) and (expressions[i+1])                     
    }
Run Code Online (Sandbox Code Playgroud)

我需要有类似的东西:

select *
from …
Run Code Online (Sandbox Code Playgroud)

ebean

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

Avaje Ebean.ManyToMany延迟BeanSet

我正在编写小应用程序,使用Play Framework 2.0,它使用Ebean作为ORM.所以我需要User类和UserGroup类之间的多对多关系.这是一些代码:

@Entity
public class User extends Domain {

    @Id
    public Long id;
    public String name;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    public Set<UserGroup> groups = new HashSet();
}



@Entity
public class UserGroup extends Domain {

    @Id
    public Long id;     
    public String name;

    @ManyToMany(mappedBy="groups")
    public Set<User> users = new HashSet();
}
Run Code Online (Sandbox Code Playgroud)

数据库方案生成器为具有中间表的代码生成良好的方案,并且所有工作都很好,直到我使用多对多.

所以我在一个请求中添加组:

user.groups.add(UserGroup.find.byId(groupId));
user.update();
Run Code Online (Sandbox Code Playgroud)

并尝试将它们输出到另一个System.out:

System.out.println(user.groups);
Run Code Online (Sandbox Code Playgroud)

这会返回:

BeanSet推迟

快速搜索显示BeanSet是来自Ebean的延迟加载容器.但似乎它没有以适当的方式工作或我错过了重要的事情.

关于我做错了什么,有什么想法吗?

many-to-many jpa playframework ebean playframework-2.0

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

如何从抽象类中正确扩展类

你好我有这样的事情

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Person extends Model {
@Id  
public int id;

public String name;

public String lastName;
}
Run Code Online (Sandbox Code Playgroud)

@Entity
public class User extends Person {
public Date registrationDate;

@ManyToMany(mappedBy="holders")
public List<Loan> loans = new ArrayList<Loan>();

public static Finder<Integer, User> find = new Finder<Integer, User>(Integer.class, User.class);
}
Run Code Online (Sandbox Code Playgroud)

首先.该表是按照我的意愿创建的,这是可以的,但我有两个问题

首先,我不能做这样的事情

User user = new User();
user.name = "Dawid";
user.save();
Run Code Online (Sandbox Code Playgroud)

我不能这样做因为我得到错误,dtype不能为null但我不能设置它(或者我只是不知道如何做到这一点)

第二件事是,如果我从db添加用户我无法通过id获取他,当我这样做时,我得到sql错误导致where clausule看起来像这样

WHERE t0. AND t0.id = 1
Run Code Online (Sandbox Code Playgroud)

你可以看到有t0.点后面没有任何东西,这会破坏一切,我不知道它在那里做了什么

ebean playframework-2.0

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

在OSX上运行`play test`会导致java应用程序出现在Dock中

这不是一个主要问题,但应用程序每次关闭时都会窃取焦点.

出现在Dock中的应用程序图标已命名sbt.ForkMain.

我已将其追溯到ebean.default="models.*"application.conf文件中.当此行被注释掉时,应用程序不会运行.我很确定这与启动的ebean服务器有关,但它不会发生在我的任何其他机器上.

我正在使用OSX 10.8.3的全新安装,即使在干净的play new xxxx文件夹中也会发生这种情况.

play! 2.1.0 (using Java 1.6.0_51 and Scala 2.10.0), http://www.playframework.org

任何帮助,将不胜感激.

java scala sbt ebean playframework-2.0

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

内部联接如何在Ebean中工作?

我读了http://www.avaje.org/ebean/introquery_joinquery.html ; 看一下例A,我注意到没有内部连接公共列的规范.我认为他们的fetch-tablename语法会导致Ebean查看2个表对内连接的列.然后他们将每个结果存储为订单?他们正在加入2个表,那么他们如何将客户表中的列存储为订单?

我尝试在我的代码中使用ebean进行内部联接,并发现至少我的一个假设是错误的.我有2张桌子,一张街道桌子和一张House桌子(一对多关系).House表中的street_id列是Street表的id列的外键.我试图想出这个sql的Ebean等价物:

SELECT s.name, h.owner, h.isSubscriber FROM Street as s INNER JOIN House as h WHERE     
h.street_id=s.id AND h.isNew='false'
Run Code Online (Sandbox Code Playgroud)

playframework ebean playframework-2.0

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

如何避免play框架中的延迟加载

在游戏框架中,我使用以下代码从名为“Report”的表中获取值,该表具有其他关系表,如“Project”、“Build”等。

List<Report> rpts = Report.find.where()
                            .eq("publish","1")
                            .eq("functionality_id", Integer.toString(fun.id))
                            .eq("project_id", currentProject.id)
                            .eq("prod_build", prod_build)
                            .eq("loadType_id", loadType_id)
                            .in("build_id", buildId)                            
                            .orderBy("id desc")                                             
                            .findList();
Run Code Online (Sandbox Code Playgroud)

我从“报告”表中获取值列表,但未填充所有相关表值。它们填充有 null。

@Entity
@Table(name="report")
public class Report {

    @Id
    public int id;

    @Constraints.Required
    @ManyToOne
    @JoinColumn(name="build_id")
    public Build build;

@Constraints.Required
    @ManyToOne
    @JoinColumn(name="project_id")
    public Project project;
.
.
}
Run Code Online (Sandbox Code Playgroud)

当我几天前测试时,它加载了这些值,但今天不起作用。当我这样做时rpts.get(i).build.release,它会给出nullPointerException,因为构建在这里为空。该代码最近几天没有更改。想知道为什么会发生这种情况。有人可以建议我是否有任何其他设置文件(如 application.conf)可以执行此延迟加载。请帮忙。

jpa playframework ebean

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

播放框架2.3.x服务器错误无法注册类

我最近在服务器上上传了Play应用程序 问题是我可以通过命令激活器运行应用程序运行它编译并运行正常.当我尝试做激活器清洁阶段时它也会编译但是在 target/universal/stage/bin/name_of_myapp之后它会抛出一个错误

Oops, cannot start the server.
Configuration error: Configuration error[Cannot register class [models.Movie] in Ebean server]
at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:94)
at play.api.Configuration.reportError(Configuration.scala:743)
at play.Configuration.reportError(Configuration.java:310)
at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:81)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
at scala.collection.immutable.List.foreach(List.scala:381)
at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:91)
at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.api.Play$.start(Play.scala:90)
at play.core.StaticApplication.<init>(ApplicationProvider.scala:55)
at play.core.server.NettyServer$.createServer(NettyServer.scala:244)
at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:280)
at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:275)
at scala.Option.map(Option.scala:145)
at play.core.server.NettyServer$.main(NettyServer.scala:275)
at play.core.server.NettyServer.main(NettyServer.scala)
Caused by: java.lang.UnsupportedClassVersionError: models/Movie : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at …
Run Code Online (Sandbox Code Playgroud)

stage playframework ebean typesafe-activator playframework-2.3

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

播放2.4 Ebean分页问题

我想在应用程序中使用分页。这是简单的示例:

public static List<MyClass> getPage(int page, int size) {
    PagedList<MyClass> findPagedList = Ebean.find(MyClass.class).findPagedList(page,size);
    return findPagedList.getList();
}
Run Code Online (Sandbox Code Playgroud)

当我索要第一页时,我没有问题,但是当我索要第二页时(例如,page = 1,size = 10),出现以下错误

[PersistenceException:查询引发了SQLException:窗口函数不支持将常量用作ORDER BY子句表达式。

我在数据库服务器上使用MsSQL。我该如何解决?

谢谢

PS在这里原始SQL

select * 
from ( 
    select top 30
        row_number() over (order by null) as rn,
        t0.ID c0, t0.update_date c1, t0.create_date c2,
        t0.code c3, t0.is_fulfilled c4, t0.fulfill_date c5,
        t0.fulfill_request_id c6, t0.app_id c7,
        t0.access_code_header_id c8, t0.product_id c9
    from access_code_details t0
) as limitresult where  rn > 20 and  rn <= 30 
Run Code Online (Sandbox Code Playgroud)

我的数据库配置:

db.default.url="jdbc:sqlserver://127.0.0.1:3333;databaseName=MyDB"
db.default.user=sa
db.default.password="******"
db.default.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
ebean.default.databasePlatform=com.avaje.ebean.config.dbplatform.MsSqlServer2005Platform …
Run Code Online (Sandbox Code Playgroud)

java sql-server playframework ebean playframework-2.4

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

Play Framework 2.4 Ebean Id Generation

到目前为止我们一直在使用Play 2.3.9,我们现在正在迁移到Play 2.4.1当我使用旧版本的Play保存实体时,但是使用新版本时,不会生成Id.我从头开始设置一个新项目并试图实现它的工作原理,自动生成的数据库有一个自动递增的Id字段,而旧项目有一个使用序列的数据库.我一直在尝试配置play/ebean来使用序列,但到目前为止还没有成功.

我在这里看了一下http://www.avaje.org/topic-97.html然后尝试了一下,但它仍然没有用.任何建议,将不胜感激.

我的配置如下所示:

ebean.default.identityGeneration=sequence
ebean.default.supportsGetGeneratedKeys=false
ebean.default.supportsSequences=true
ebean.default.debug.sql=true
Run Code Online (Sandbox Code Playgroud)

我也尝试过

ebean.default.identityGeneration=generator
Run Code Online (Sandbox Code Playgroud)

我把这些行直接放在application.conf中我也用ServerConfigStartup方式配置了ebean,但没有运气.

playframework ebean playframework-2.0

3
推荐指数
1
解决办法
1233
查看次数

EBean(4.5.x)是否支持映射Java 8的时间类型,例如OffsetDateTime

有一张关闭的票证表明Ebean 4.4.1及以后版本支持Java 8的时间类,例如OffsetDateTime.但是,我找不到任何显示使用这些类的Ebean文档.

对于如下AppUser所示的类,是否完全支持使用OffsetDateTime而不是java.sql.Timestamp

@Entity
public class AppUser extends Model {

    @Id
    private Long id;
    private String username;
    private OffsetDateTime lastSeen;

    // Constructor, getters and setters
}
Run Code Online (Sandbox Code Playgroud)

java playframework java-8 ebean

3
推荐指数
1
解决办法
780
查看次数