首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipselink活在过去,DDL没有反映实体

Eclipselink活在过去,DDL没有反映实体
EN

Stack Overflow用户
提问于 2010-09-21 17:37:09
回答 2查看 870关注 0票数 1

奇怪的事..。我很高兴地使用EclipseLink / JPA 2作为我的持久性单元的提供者(后面有一个MySQL关系数据库管理系统)。我关闭了DDL-drop/create,因为我想在DB中保存记录,而且不管怎么说,实体没有任何更改。

现在,我刚刚对一个实体做了一些更大的更改(添加一些属性,重命名/重新键入其他属性,将以前嵌入的对象平面导入到这个实体中,等等)。我打开DDL-drop/create,重新部署几次,然后.什么都没变!

EclipseLink实际上根据旧的信息创建(并重新创建) SQL表!就好像它有一个Java类的副本而忽略了我刚刚更新的那个.

更疯狂的是,以前嵌入的对象消失了。我删除了班级档案。Eclipselink 仍然是在以前嵌入类的表中创建属性。

我在GlassFish server.log中没有看到任何例外。我删除并重新创建了持久化单元,没有改变。有什么想法吗?(如果我应该发布任何代码/日志条目,请告诉我,我将更新这个帖子。)

更新:在将eclipselink.logging.level设置为FINEST之后,我仍然没有看到任何例外。DDL-脚本被创建(其中包含错误的列),并在DB上愉快地执行(当然,创建错误的列)。在日志中,我看到EclipseLink在谈论不再存在的字段:

代码语言:javascript
复制
[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;|
The alias name for the entity class [class mvs.entity.Shopper] is being defaulted to: Shopper.|#]

[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;|
The column name for element [field msisdn] is being defaulted to: MSISDN.|#]

[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;|
The column name for element [field imei] is being defaulted to: IMEI.|#]

在本例中,mvs.entity.Shopper是类。msisdn是一个现有的字段,但是imei已经不存在了。不知道EclipseLink从哪里得到的信息..。

顺便说一句,我已经将eclipselink.weaving设置为false,因为它会导致延迟加载问题。这可能是相关的吗?

更新2:按照戈登的建议,我寻找实体的旧副本,但找不到。在一个新的GlassFish上部署应用程序并没有显示上面的行为,而是像DDL创建一样正确地完成了映射!易皮:)

我唯一的结论是,旧的副本必须保存在GlassFish的某个地方,即使是在取消部署之后。这有意义吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-23 07:36:53

安装一个新的GlassFish副本并将应用程序部署到它解决了问题。在比较了GF的两个副本之后,我在glassfish/domains/domain1/lib中发现了一个旧的构建工件,其中包含了旧的实体定义。除去这些之后,一切都如期而至。

到头来,我自己犯了个愚蠢的错误。

票数 0
EN

Stack Overflow用户

发布于 2010-09-22 19:28:12

要么在类路径上有一个带有旧映射的orm.xml文件,要么部署该类的旧版本。EclipseLink无法在部署之间“存储”类。尝试对部署中的类文件进行反编译,以查看它是否有更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3762913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档