我在我的实体中映射字符串和枚举的集合时遇到问题.我遵循了不同的建议,但似乎没有任何效果.我正在使用PlayFramework 2.0和提供的Ebean作为ORM.
这是一个插图类:
package models;
import java.util.*;
import javax.persistence.*;
import play.db.ebean.Model;
@Entity
@Table(name = "foo")
public class Foo extends Model {
private static final long serialVersionUID = 1L;
private enum FooBar {
FOO, BAR;
}
@Id
public Long id;
@ElementCollection
@Enumerated(EnumType.STRING)
@CollectionTable(name = "bar_foobar",
joinColumns = @JoinColumn(name = "bar_id",
referencedColumnName = "id"))
@Column(name = "foobar")
public List<FooBar> fooBars;
@ElementCollection(targetClass = String.class)
@CollectionTable(name = "bar_strings",
joinColumns = @JoinColumn(name = "bar_id"))
@Column(name = "string", nullable = false)
public List<String> listOfStrings;
@Basic
public …Run Code Online (Sandbox Code Playgroud) 我需要填充一个包含大量数据的表,所以我不想找到相关的对象,只需要输入它们的数值.为此,我将构建一个简单的查询,即:
INSERT INTO article_category (article_id, category_id) VALUES (2,12);
Run Code Online (Sandbox Code Playgroud)
无论如何都找不到用Ebean做这个的方法,我试过:
RawSql rawSql = RawSqlBuilder
.parse("INSERT INTO article_category (article_id, category_id) VALUES (2,12)")
.create();
Run Code Online (Sandbox Code Playgroud)
然而,这引发了一个例外:
[RuntimeException:解析sql时出错,找不到SELECT关键字:INSERT INTO article_category(article_id,category_id)VALUES(2,12)]
如何用Ebean调用真正的原始查询?
我正在使用playframework(2.0.4)和Ebean ORM的最新版本.这是我简化的数据库模式
TABLENAME (FIELD_NAME (, ...) )
User (id)
Group (id)
UserGroup (user_id, group_id, is_active)
Run Code Online (Sandbox Code Playgroud)
我想创建我的实体模型,如下所示:
@Entity
public class UserGroup extends Model {
private static final long serialVersionUID = 1L;
@EmbeddedId
public UserGroupPK pk;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", insertable = false, updatable = false)
public User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "group_id", insertable = false, updatable = false)
public Group group;
}
@Embeddable
public class UserGroupPK implements Serializable{
private static final long serialVersionUID = 1L;
public Long …Run Code Online (Sandbox Code Playgroud) 我有两个班,用户和汽车.两者都有ManyToMany相互映射.
用户:
@Entity
public class User extends Model {
private int year;
@ManyToMany(cascade=CascadeType.ALL)
private List<Car> cars;
}
Run Code Online (Sandbox Code Playgroud)
汽车:
@Entity
public class Car extends Model {
@ManyToMany(mappedBy = "cars", cascade=CascadeType.ALL )
private List<User> users;
}
Run Code Online (Sandbox Code Playgroud)
使用ebean,我只想查询1999年那些在其列表中提供用户的汽车.我不想在Java代码中迭代用户的汽车列表.
我没有找到任何文档,多少对多的查询应该是什么样子.所以我会这样:
public List<Car> findCars(int year, User user) {
return Car.find.where().eq("year", int).eq("users", user).findList();
}
Run Code Online (Sandbox Code Playgroud)
这可能与Ebean有关吗?
我在剧中使用了一个ebean查询!框架,用于根据不同的列查找记录列表.这似乎是一个非常简单的查询,但问题是ebean方法setDistinct(true)实际上并没有将查询设置为distinct.
我的查询是:
List<Song> allSongs = Song.find.select("artistName").setDistinct(true).findList();
Run Code Online (Sandbox Code Playgroud)
在我的结果中,我得到重复的艺术家姓名
从我所看到的,我相信这是正确的语法,但我可能是错的.我很感激任何帮助.谢谢.
可以说我有这些表:
ORDER: id ITEM: id ORDER_ITEM: order_id, item_id
表:ORDER_ITEM是ORDER和之间的桥表ITEM.
我如何描述这三人组Ebean?
我宁愿不使用原始SQL,以便我仍然可以创建和更新这些实体.
更新于 11月9日星期六02:32:40 UTC 2013
好吧,让我们更难以解决这个问题,更能代表我的实际情况.列名称不符合约定:
ORDER: order_number ITEM: item_number ORDER_ITEM: my_order, my_item
我正在使用Play Framework和Ebean ORM.说,我有2个相关的实体类(Card.java和FinalMark.java)
Card.java
@Entity
public class Card extends Model {
private static final long serialVersionUID = 1L;
@Id
. . .
@OneToMany(mappedBy = "card")
public List<FinalMark> finalMarks;
. . .
public static Finder<Integer, Card> find =
new Finder<>(Integer.class, Card.class);
}
Run Code Online (Sandbox Code Playgroud)
FinalMark.java
@Entity
public class FinalMark extends Model {
private static final long serialVersionUID = 1L;
@Id
@ManyToOne
public Card card;
. . .
public static Finder<Integer, FinalMark> find = new Finder<>(Integer.class,
FinalMark.class);
}
Run Code Online (Sandbox Code Playgroud)
当我获取Card实例时(例如,通过Card.find.byId()),FinalMark也将获取所有相关实例.但我怎么能对它们进行排序呢?Ebean或我应该对结果列表进行排序吗?
谢谢你浪费你的时间.
我想知道是否有可能使用@PrePersist,并@PreUpdate与Ebean玩吧!2.0.如果是这样,该功能如何激活.我已经看到一个月前有一个拉取请求添加此功能,但我无法在Play 2.0上进行此操作.
谢谢
我在Play Framework 2中使用Ebean,有时会出现类似的OptimisticLockException:
play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[OptimisticLockException: Data has changed. updated [0] rows sql[update manager set modification_time=?, session_id=?, expiration_date=? where id=? and rating=? and creation_time=? and modification_time=? and name=? and surname=? and login=? and password_hash=? and email=? and session_id=? and expiration_date=?] bind[null]]]
Run Code Online (Sandbox Code Playgroud)
当少数演员开始访问数据库时会发生这种情况
那么,Manager类是:
public class Manager extends Model {
@Getter @Setter
Long id;
@Getter @Setter
private String name;
@Getter @Setter
private String surname;
@Column(unique = true)
@Getter @Setter
private String login;
@Getter @Setter
private String passwordHash;
@Getter @Setter
private …Run Code Online (Sandbox Code Playgroud) 我在尝试搜索列表中的特定Java对象时遇到了问题.
实际上我得到了我想为另一个Java类工作的搜索功能.现在我尝试了另一个但不是返回结果列表我得到一个NullPointerException.
这就是我的功能:
public static List<Customer> searchByEverything(String keyword){
List<Customer> customerList = find.all(); //Using java Ebean
System.out.println(keyword); //Check if keyword is not empty
System.out.println(customerList); //Check if list is not empty
Predicate<Customer> customerPredicate = u -> u.name.toLowerCase().contains(keyword.toLowerCase());
try{
return customerList.stream().filter(customerPredicate).collect(Collectors.toList());
}catch (Exception e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这是来自Exception e的strack trace:
java.lang.NullPointerException
at models.Customer.lambda$searchByEverything$2(Customer.java:174)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.ArrayList$Itr.forEachRemaining(ArrayList.java:891)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at models.Customer.searchByEverything(Customer.java:179)
at controllers.Application.searchCustomers(Application.java:262)
at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$17$$anonfun$apply$17.apply(Routes.scala:479)
at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$17$$anonfun$apply$17.apply(Routes.scala:479)
at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:157)
at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:156)
at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$14$$anon$3$$anon$1.invocation(HandlerInvoker.scala:136)
at …Run Code Online (Sandbox Code Playgroud)