标签: ebean

使用Join表创建单向OneToMany关系

我有一个用户表和兴趣表,兴趣表中的行数是finiate,我正在尝试模拟senario,每个用户都有一组兴趣,这是我的代码:

@Entity 
@Table(name="user")
public class User extends Model{
@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="user_interest")
public List<Interest> interests;
} 


@Entity 
@Table(name="interest")
public class Interest extends Model{
@Id
public Long id;
public String   name;
public String   image;
}
Run Code Online (Sandbox Code Playgroud)

我自然希望有联合表但是进化忽略了创建连接表并尝试通过在兴趣表中添加额外的列来实现.这是

create table interest (
19 id                        bigint auto_increment not null,
20 user_id                   bigint not null,
21 name                      varchar(255),
22 image                     varchar(255),
23 constraint pk_interest primary key (id))
.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么??如何使用ebean在play2.2中创建一个简单的OneToMany关系WITH join表?

感谢致敬

one-to-many ebean playframework-2.0

2
推荐指数
1
解决办法
1691
查看次数

带有DEFAULT id的INSERT在PostgreSQL中不起作用

我尝试在Postgres中运行此语句:

insert into field (id, name) values (DEFAULT, 'Me')
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

ERROR: null value in column "id" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)

我最终不得不手动设置ID.问题是当我的应用程序插入记录时,我收到重复的密钥错误.我正在使用Play框架和ebean ORM构建一个Java应用程序.因此整个模式由ebean自动生成.在这种情况下,手动将记录插入我的数据库的最佳做法是什么?

编辑:
这是我创建Field类的方法

@Entity
public class Field {
    @id
    public Long id;
    public String name;
}
Run Code Online (Sandbox Code Playgroud)

编辑:
我检查了field_seq序列,它看起来像这样:

CREATE SEQUENCE public.field_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; 
Run Code Online (Sandbox Code Playgroud)

编辑:
这是pgAdmin III中生成的SQL:

CREATE TABLE field
(
  id bigint NOT NULL,
  created timestamp without time zone,
  modified timestamp without time zone,
  name character varying(255),
  enabled boolean,
  auto_set boolean, …
Run Code Online (Sandbox Code Playgroud)

java postgresql insert playframework ebean

2
推荐指数
1
解决办法
3024
查看次数

玩2个框架单元测试 - java.lang.RuntimeException:DataSource用户是否为空?

我试图在MySQL兼容模式下使用H2数据库在Play 2应用程序中运行单元测试.我配置@Before如下:

@Before
public void startApp() throws Exception {
    Map<String, String> settings = new HashMap<String, String>();
    settings.put("db.default.driver", "org.h2.Driver");
    settings.put("db.default.user", "sa");
    settings.put("db.default.password", "");
    settings.put("db.default.url", "jdbc:h2:mem:play-test-351881363;MODE=MySQL"); // TODO: use config for url
    settings.put("db.default.jndiName", "DefaultDS");
    app = Helpers.fakeApplication(settings);
    Helpers.start(app);

    databaseTester = new JndiDatabaseTester("DefaultDS");

    IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(play.Play.application()
            .resourceAsStream("/resources/dataset.xml"));
    databaseTester.setDataSet(expectedDataSet);
    databaseTester.onSetup();
}

@After
public void stopApp() throws Exception {
    databaseTester.onTearDown();
    Helpers.stop(app);
}
Run Code Online (Sandbox Code Playgroud)

但它在java.lang.RuntimeException: DataSource user is null?尝试访问数据库时导致实际测试方法:

[ERROR] [02/12/2013 01:19:32.085] [application-akka.actor.default-dispatcher-4] [akka://application/user/load_data_task_runner_test/load_record] DataSource user is null?
java.lang.RuntimeException: DataSource user …
Run Code Online (Sandbox Code Playgroud)

unit-testing h2 playframework ebean playframework-2.0

2
推荐指数
1
解决办法
8322
查看次数

Play!Framework 2 Java模型字符串字段长度注释

为了获得最佳性能和验证便利性,String字段需要哪些注释?

数据库:MySQL

存储地区名称的字段

@Column(length=50)  // javax.persistence.Column
Run Code Online (Sandbox Code Playgroud)

这会被转换为varchar(50)吗?或者我特别需要这个:

@Column(columnDefinition='varchar(50)') 
Run Code Online (Sandbox Code Playgroud)

还有另外两个注释

@MaxLength(50) // play.data.validation.Constraints.MaxLength
@Length(max=50) // com.avaje.ebean.validation.Length, is this one useful or not required anyway?
public String districtName;
Run Code Online (Sandbox Code Playgroud)

我想我需要@Column(长度= 50)进行定义,并且@MaxLength(50)需要同时进行验证?或者这两个中的一个会自动暗示另一个?

谢谢.

annotations jpa playframework ebean playframework-2.1

2
推荐指数
1
解决办法
3934
查看次数

在Json.toJson()之后播放ebean的Date字段格式

当我试图在Controller方法结果中返回JSON时,我在Ebean模型中正确格式化日期字段时遇到问题

ok(Json.toJson(userObj));
Run Code Online (Sandbox Code Playgroud)

我的代码示例:

@Entity
@Table(name = "user")
public class User extends Model {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_seq")
    public Integer id;

    @Formats.DateTime(pattern = "yyyy-MM-dd hh:mm:ss")
    public Date last_login;
...
}
Run Code Online (Sandbox Code Playgroud)

表位于postgresql数据库中 - 字段last_login是时间戳.

Json的结果是:

{"id":202,"last_login":1386775797494,...}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下如何让它发挥作用吗?

最好的问候,卢卡斯

json playframework ebean playframework-2.0

2
推荐指数
1
解决办法
2844
查看次数

播放框架+ Ebean:[错误] ...未找到:键入Finder

我在Play 2.0中开发了一个Java应用程序,现在我正在尝试将其部署到AWS.我首先尝试以与在本地计算机上相同的方式运行它.我将播放源复制到虚拟EC2服务器(Ubuntu 12.04),导出播放到类路径,并复制我的项目.当我运行play compile时,我收到以下错误

[info] Loading project definition from /home/ubuntu/play-2.0/samples/java/test-crud/project
[info] Set current project to computer-database (in build file:/home/ubuntu/play-2.0/samples/java/test-crud/)
[info] Updating {file:/home/ubuntu/play-2.0/samples/java/test-crud/}computer-database...
[info] Done updating.                                                                  
[info] Compiling 21 Scala sources and 16 Java sources to /home/ubuntu/play-2.0/samples  /java/test-crud/target/scala-2.9.1/classes...
[error] /home/ubuntu/play-2.0/samples/java/test-crud/app/models/Dealership.java:32: not found: type Finder
[error]     public static Finder<Long,Dealership> find = new Finder<Long,Dealership>(Long.class, Dealership.class); 
[error]                   ^
[error] one error found
[error] {file:/home/ubuntu/play-2.0/samples/java/test-crud/}computer-database/compile:compile: Compilation failed
[error] Total time: 117 s, completed Apr 21, 2014 3:48:33 AM
Run Code Online (Sandbox Code Playgroud)

该应用程序基于Ebean的CRUD示例构建.当我尝试在Play中编译该示例应用程序时,我没有任何麻烦.为什么编译器与Finder有问题?

java scala ebean playframework-2.0

2
推荐指数
1
解决办法
1705
查看次数

播放框架2 ebean @manytoone列指定两次

我正在使用ebean运行一些问题(使用play framework 2 version 2.2.1)我有两个类:

我的图类:

public class Graph extends Model {
     @Id
     @Column(name="id")
     private String id;

     @Column(name="type")
     private String type;

     @OneToMany(mappedBy="valGraph", cascade=CascadeType.ALL)
     private List<Val> valItems; 
Run Code Online (Sandbox Code Playgroud)

和我的值类(使用Val.graphId外键Graph.id):

public class Val extends Model
     @Id
     @Column(name="valId")
     private String valId;  

     @Id
     @Column(name="graphId")
     private String graphId;

     @Column(name="Key")
     private String Key;

     @Column(name="Value")
     private String Value;

     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name="graphId")
     private Graph valGraph;
Run Code Online (Sandbox Code Playgroud)

但在尝试保存新项目时,我收到此错误:

javax.persistence.PersistenceException:ERROR执行DML bindLog []错误[列'graphId'指定两次]

java one-to-many many-to-one ebean playframework-2.0

2
推荐指数
1
解决办法
2681
查看次数

如何完全填充Ebean实体?

我正在使用Play框架,我正在尝试从我的scala代码访问Ebean实体的属性(定义为公共字段并由Play框架增强).

从游戏文档中我了解到了这一点

(2)直接Ebean字段访问(启用延迟加载)的增强仅适用于Java类,而不适用于Scala.因此,Scala源文件(包括标准Play模板)的直接字段访问不会调用延迟加载,通常会导致空(未填充)实体字段.要确保填充字段,可以(a)手动创建getter/setter并改为调用它们,或者(b)确保在访问字段之前完全填充实体.

那我该如何做(b)?我可以在调用scala之前从我的Java访问属性但是有更好/更简单的方法吗?

java scala ebean playframework-2.0

2
推荐指数
1
解决办法
656
查看次数

如何设置表Ebean/Play框架之间的关系

我是Ebean世界的新手,我在实体之间设置一些关系遇到了一些困难.

我基本上有两个班,User而且Car.

一个用户可以有辆车(我猜OneToMany),一辆车可以属于一个用户(所以我猜OneToOne).

我如何链接这两个实体?这是我到目前为止所做的

用户

@Entity
public class User extends Model{
    @Id
    @GeneratedValue
    public int id;  
    public String name; 
    @ManyToMany(cascade=CascadeType.ALL)
    public List<Car> car = new ArrayList<Car>();
}
Run Code Online (Sandbox Code Playgroud)

汽车

@Entity
public class Car extends Model{
    @Id
    @GeneratedValue
    public int id;
    @OneToOne(cascade = CascadeType.ALL)
    public User user; 
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

PersistenceException:models.User.car上的错误在[models.Car]中找不到mappedBy属性[users]

有人可以清楚地向我解释如何以正确的方式使用注释(非常糟糕的文档),并告诉我为什么会出现此错误?

java playframework ebean playframework-2.2 playframework-2.3

2
推荐指数
1
解决办法
4176
查看次数

未解决的依赖sbt-play-ebean

这是我的plugins.sbt

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.2.2")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.0")
Run Code Online (Sandbox Code Playgroud)

build.sbt

name := """play-java-starter-example"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean)

scalaVersion := "2.12.2"

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs, 
  javaEbean, 
  evolutions
)

libraryDependencies += guice


// Test Database
libraryDependencies += "com.h2database" % "h2" % "1.4.194"

// Testing libraries for dealing with CompletionStage...
libraryDependencies += "org.assertj" % "assertj-core" % "3.6.2" % Test
libraryDependencies += "org.awaitility" % "awaitility" % …
Run Code Online (Sandbox Code Playgroud)

java sbt playframework ebean

2
推荐指数
1
解决办法
1422
查看次数