奇怪的东西......我很高兴地使用EclipseLink/JPA 2作为持久性单元的提供者(在后面有一个MySQL RDBMS)。我关闭了DDL-drop/create,因为我想将记录保存在数据库中,并且无论如何都没有对实体进行任何更改。Eclipselink生活在过去,DDL没有反映实体
现在我对一个实体做了一些更大的改变(添加了一些属性,重命名/重新输入其他属性,将以前嵌入的对象导入到此实体中,等等)。我打开DDL-drop/create,重新部署几次,...没有任何变化!
EclipseLink实际上基于旧信息创建(并重新创建)SQL表!这就像它有一个Java类的副本,并忽略了我刚刚更新的那个...
更疯狂,先前嵌入的对象已经消失。我删除了类文件。 Eclipselink 仍然在先前嵌入类的表中创建属性。
我在GlassFish server.log中看不到例外情况。我放弃并重新创建了持久性单元,没有改变。有任何想法吗? (让我知道如果我应该张贴任何代码/日志条目,我会更新这个帖子。)
更新:设置eclipselink.logging.level
到FINEST
后,我仍然看到没有例外。创建DDL脚本(在其中有错误的列)并愉快地在DB上执行(当然创建了错误的列)。在日志中我看到的EclipseLink谈论是不存在了的字段:
[#|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创建一样! Yippie :)
我唯一的结论是,旧的副本必须保留在GlassFish的某个地方,即使在取消部署之后......这有道理吗?
您可以启用Eclipselink日志记录到文件并将日志记录级别设置为调试。然后启动你的应用程序,看看你得到关于DDL的消息。 – Pace 2010-09-22 14:39:52
@Pace:thx您的回应。我已更新该帖子。任何其他想法? – Hank 2010-09-22 15:26:28
您应该发布最新的更新作为答案并接受它。 – 2010-09-23 00:37:16