【发布时间】:2010-02-27 14:25:41
【问题描述】:
作为 Google App Engine 项目的一部分,我正在使用 DataNucleus,但我在持久化列方面遇到了一些问题。
@PrimaryKey(column = "user_id")
@Column(name = "user_id")
@Persistent(name = "user_id", column = "user_id", valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key m_id;
@Column(name = "user_name")
@Persistent(name = "user_name", column = "user_name")
private String m_userName;
如果您看不出来,我试图将列命名为与变量名称不同的名称,因为我有两种命名约定(一种在 Java 中效果更好,一种在 SQL 中效果更好)。无论如何,我已经尝试了这些标记注释的所有变体,但 DataNucleus 增强器拒绝尊重它们中的任何一个,所以当我运行这样的查询时:
Query q = pm.newQuery(User.class,
"user_name == _username");
我总是收到这样的错误:
org.datanucleus.store.appengine.FatalNucleusUserException:解析查询时出现意外的表达式类型。您确定您的对象上存在名为 user_name 的字段吗?
当然,当运行这样的查询时:
Query q = pm.newQuery(User.class,
"m_userName == _username");
...一切都很好。因此,如果这些注释中的任何一个被兑现,就会有一个名为 user_name 的字段,但显然不是。
SO 我的问题是:有没有办法将我在查询中使用的标记与字段名称分离?我正在寻找无需手动编辑查询即可更改字段名称的功能。
注意:我宁愿在 Java 类中使用我的 SQL 命名约定,也不愿手工编写大量的 XML,所以这必须通过注释来完成。
【问题讨论】:
标签: java google-app-engine annotations jdo datanucleus