我是Play框架的新手.我正在尝试将MySQL数据库配置为与Play Ebeans一起使用的数据源.
请问您能解释一下使用Play 2.0框架配置MySQL所需的步骤(例如,下载驱动程序,添加依赖项等).
我想检查一下Ebean生成的SQL语句,以找出为什么在我的Play 2.0应用程序中发生某些异常(与SQL语法相关).有没有办法在Play Framework 2.0中记录Ebean生成的SQL语句?
在Play 1.x中,有一个jpa.debugSQL配置选项,如果设置为true,则会执行此操作.Play 2.0是否存在类似的Ebean设置?关于Play 2.0的Ebean的文档页面仍然有点稀缺.
到目前为止我尝试了什么:
我在我的控制器和Global对象的onStart/ onRequest方法中添加了这些方法调用,但它没有任何效果:
Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL);
Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(Play.isDev());
Run Code Online (Sandbox Code Playgroud)
我已经修改了日志级别application.conf,但它也没有帮助(即使是日志级别TRACE).
我有一个id:
@Column(name = "device")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "device_gen")
@SequenceGenerator(name = "device_gen", sequenceName = "device_id")
@Id
public Integer id;
Run Code Online (Sandbox Code Playgroud)
SequenceGenerator将sequenceName定义为device_id但尝试保存实体我得到错误:关系"public.device_seq"不存在.
为什么要寻找device_seq而不是device_id?
我正在使用PostgreSQL
我正在运行Java Play框架版本v2.6.1并使用Ebean进行持久化.我的目的是使用play2-memcached插件获取bean缓存.
到目前为止我做了什么?
memcached在localhost上并启用详细日志记录.ehcache用cacheApiin libraryDependenciesin 替换了依赖build.sbt(我假设,应该完全删除Ehcache)."com.github.mumoshu" %% "play2-memcached-play26" % "0.9.0",到libraryDependencies在build.sbt"Spy Repository" at "http://files.couchbase.com/maven2",到resolvers在build.sbtplay.modules.disabled += "play.api.cache.ehcache.EhCacheModule"
play.modules.enabled+="com.github.mumoshu.play2.memcached.MemcachedModule"
play.cache.defaultCache=default
play.cache.bindCaches=["db-cache", "user-cache", "session-cache"]
memcached.host="127.0.0.1:11211"
Serializable,还添加了@com.avaje.ebean.annotation.Cache注释.什么有用?
Entity.find.byId(id)结果SQL 加载实体SELECT.使用不同的请求结果再次加载它没有SQL语句.com.github.mumoshu加载了与缓存相关的类.什么不起作用?
netstat -na | …我希望拥有比我更多Ebean专业知识的人可以帮助我解决我现在正在排除故障的不稳定问题.
环境:
我的主要问题是当我重新启动Play时,我正在交替使用SQLExceptions,所有这些都与Ebean正在创建的预准备语句中的参数太多或太少有关.数据集A在数据集B失败的情况下工作一半,但在重新启动Play时,数据集B在数据集A失败时工作.
我正在根据我写入传递给函数的一组Filter对象动态构建一个Ebean Query对象.Ebean查询正在查找满足每个Filter的给定要求的所有对象.
该功能类似于:
private List<Contact> contacts getContacts(Set<Filter> filters) {
Query<Contact> query = Contact.find;
for (Filter filter : filters) {
filter.apply(query);
}
List<Contact> contacts = query.findList();
}
Run Code Online (Sandbox Code Playgroud)
过滤器的示例:
public void apply(Query<Contact> query) {
query.where().in("tags", getTags());
}
Run Code Online (Sandbox Code Playgroud)
首先,Ebean支持这种类型的查询构建吗?我相信这是因为大多数时候这是有效的,然而,我遇到了使用某些数据运行"getContacts"函数数百次的问题,但有时只是......
所以坚持我,因为这个问题非常令人困惑.我还将介绍数据实际上的大部分细节,但如果您需要/需要更多信息,请询问.
数据集A的查询和异常:
select distinct t0.contact_id c0, t0.contact_uuid c1, t0.bounce c2
from contact t0
join email_record u1 on u1.contact_id = t0.contact_id
join contact_tag u2z_ on u2z_.contact_id = t0.contact_id
join tag u2 on u2.tag_id = …Run Code Online (Sandbox Code Playgroud) 我有2个需要连接的数据库.我可以在application.conf文件中轻松连接到它们,如下所示:
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost/db1"
db.default.user=postgres
db.default.password="password"
db.secondary.driver=org.postgresql.Driver
db.secondary.url="jdbc:postgresql://localhost/db2"
db.secondary.user=postgres
db.secondary.password="password"
ebean.default="models.db1.*"
ebean.secondary="models.db2.*"
Run Code Online (Sandbox Code Playgroud)
我在这些包中有我的模型类,并且DDL正确生成表.
问题在于实际使用这些实体.任何不在"默认"包中的内容都会抛出此错误(使用辅助数据库中的Users表作为示例)
如果我尝试查询表的所有行:
List<Users> users = Users.find.all();
Run Code Online (Sandbox Code Playgroud)
它抛出此错误:
[PersistenceException: models.db2.Users is NOT an Entity Bean registered with this server?]
Run Code Online (Sandbox Code Playgroud)
即使我100%确定后端有Users表,它是DDL工作的注册表,并使该表正常,我正在导入正确的类.
我是否需要某种方式来查询不在默认包中的模型类?
编辑:我意识到堆栈跟踪显示它正在尝试使用DefaultServer.如何让它使用辅助服务器?
at com.avaje.ebeaninternal.server.core.DefaultServer.createQuery(DefaultServer.java:989) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServer.createQuery(DefaultServer.java:946) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServer.find(DefaultServer.java:982) ~[avaje-ebeanorm-server.jar:na]
at play.db.ebean.Model$Finder.all(Model.java:254) ~[play-java-ebean_2.10.jar:2.1.3]
Run Code Online (Sandbox Code Playgroud) 如何在日志中显示SQL语句?我正在使用EBeans,但由于某些原因它无法插入,但我看不出有什么问题.
我尝试将配置编辑为:
db.default.logStatements=true
Run Code Online (Sandbox Code Playgroud)
并将其添加到logback.xml
<logger name="com.jolbox" level="DEBUG" />
Run Code Online (Sandbox Code Playgroud)
按照我在网上找到的一些答案,但它似乎不适用于2.4 ......
我有一个名为"EventCheckin"的模型,它具有到"事件"和"用户"的ManyToOne映射."EventCheckin"表的PrimaryKey是用户的id和事件的id.我试图在我的EventCheckin模型中使用"EmbeddedId"来表示这一点,但是当我尝试保存EventCheckin时,它会尝试将user_id和event_id值放入表中两次,这显然会失败:
Caused by: org.h2.jdbc.JdbcSQLException: Duplicate column name "USER_ID"; SQL statement:
insert into eventCheckin (event_id, user_id, latitude, longitude, user_id, event
_id) values (?,?,?,?,?,?) [42121-158]
Run Code Online (Sandbox Code Playgroud)
EventCheckin课程:
@Entity
@Table(name="eventCheckin")
public class EventCheckin extends Model
{
@EmbeddedId public CheckinId id;
@MapsId("userId")
@JoinColumn(name="user_id")
@ManyToOne public User user;
@MapsId("eventId")
@JoinColumn(name="event_id")
@ManyToOne public Event event;
.....
}
Run Code Online (Sandbox Code Playgroud)
CheckinId EmbeddedId类::
@Embeddable
public class CheckinId implements Serializable
{
public Long eventId;
public String userId;
.....
}
Run Code Online (Sandbox Code Playgroud)
我的EventCheckin数据库表定义如下:
create table eventCheckin (
user_id varchar(255) not null,
event_id bigint not null, …Run Code Online (Sandbox Code Playgroud) 我对Play框架比较陌生,我试过跟着这本食谱,但它似乎已经过时了.无论如何我只是想知道我提到的那些之间是否存在很大差异.
一些教程使用eBean而其他教程使用jpa.我真的很困惑.