EclipseLink 和 H2
Posted
技术标签:
【中文标题】EclipseLink 和 H2【英文标题】:EclipseLink and H2 【发布时间】:2013-10-06 15:09:54 【问题描述】:我尝试在 Eclipse IDE 中将 EclipseLink JPA 提供程序与 H2 DBMS 一起使用。
当我创建一个新的 JPA 项目并填充数据 (URL="jdbc:h2:~/test",Username="user",password="") 连接类型:资源本地(我使用嵌入式模式) 我得到两件奇怪的事情:
-
当我尝试从表中创建实体时,我得到一个空白表列表
我在@Entity 符号附近收到一条错误消息,指出“无法为实体 e1 解析目录用户”或“无法为实体 e1 解析架构用户”,具体取决于保留目录的默认值或更改它在创建项目时,其中 User 是数据库用户名
数据库已经包含在 Firefox 中使用 h2 控制台的表
这些问题的原因是什么,我该如何解决?你有任何页面或书籍可以帮助处理persistence.xml文件(除了oracle官方网站)?
【问题讨论】:
数据库 URL 看起来错误:缺少斜杠。应该是jdbc:h2:~/test
。
对不起。在这里输入时出错。顺便说一句,这仍然有效并创建新数据库:)
好的。这很重要,因为jdbc:h2:~/test
是当前用户主目录中的数据库,jdbc:h2:~test
是当前工作目录(您启动应用程序的位置)中的数据库,文件名为 ~test
。
【参考方案1】:
EclipseLink 不会为您创建数据库表,除非您明确告诉它这样做。
the documentation中描述了这样做的方法
EclipseLink 可用于为持久性单元自动生成表和数据库模式。这是通过“eclipselink.ddl-generation”持久单元属性完成的,设置为“create-tables”或“drop-and-create-tables”。将为该持久性单元中定义的所有类生成表和约束。
【讨论】:
我没有说从实体创建表我说的是从表创建实体 如果您从不创建任何表,H2 数据库将如何包含它们?读心术?黑魔法? 数据库已经包含表,我在firefox中使用它的控制台创建了它们 URL jdbc:h2:~/test 是相对于应用程序当前目录的数据库文件的 URL。见h2database.com/html/features.html#embedded_databases。因此,您可能没有连接到与控制台中的数据库相同的数据库。【参考方案2】:诀窍是在创建 JPA 项目时设置正确的目录,然后一切都运行得很好
【讨论】:
以上是关于EclipseLink 和 H2的主要内容,如果未能解决你的问题,请参考以下文章
使用 eclipselink 和 @namedquery 进行错误转换
EclipseLink - Oracle 存储过程调用新手问题
从日期开始的日期 EXTRACT(DAY,s.date) 不起作用 jpa 和 eclipseLink