我正在使用 DataNucleus 作为 Google App Engine 项目的一部分,并且在持久性列方面遇到了一些麻烦。
@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
如果这些注释中的任何一个被兑现,就会有一个名为的字段,但显然不是。
所以我的问题是:有什么方法可以将我在查询中使用的标记与字段名称分离?我正在寻找无需手动编辑查询即可更改字段名称的能力。
注意:我宁愿在 Java 类中使用我的 SQL 命名约定,也不愿手动编写大量的 XML,因此必须使用注释来完成。