我正在尝试查找EclipseLink错误bugs.eclipse.org/bugs/show_bug.cgi?id=344448的解决方法。
问题是EclipseLink为HashMap的每个条目选择由实体ID +哈希映射值ID构成的主键。我想修改为具有实体ID +哈希映射键ID的主键。这不仅是主键约束的问题,而且是EclipseLink生成的SQL语句的问题,例如删除,更新等。
所以...我看到了一种使用Customiser并通过抓取hashmap字段的ManyToManyMapping并修改所需内容来自定义行为的方法。我在这方面找不到太多文档,所以我正在尝试一些事情……但到目前为止没有成功。
public class ConfigureValuesFilter implements DescriptorCustomizer {
public void customize(ClassDescriptor descriptor) throws Exception {
ManyToManyMapping mapping = (ManyToManyMapping) descriptor
.getMappingForAttributeName("values");
// various attempts
}
我尝试使用mapping.setTargetRelationKeyFieldName(“ value_KEY”);设置主键。和setTargetKeyFieldNames(为什么两者都需要?),但是这导致我要使用的表(从键)的数组索引超出范围错误(在描述符中不可用,请参见下文)。
Exception Description: The table [CASEVALUE] is not present in this descriptor.
Descriptor: RelationalDescriptor(testdb.EULADocument --> [DatabaseTable(EULADOCUMENT)])
然后,我尝试使用setDeleteSQLString更改删除查询语句,但是我在如何传递参数值方面陷入困境
mapping.setDeleteSQLString("DELETE FROM LICENSE_EULADOCUMENT WHERE ((values_KEY = #VALUES_KEY) AND (License_ID = #LICENSE_ID))");
说找不到VALUES_KEY,因此将其设置为NULL ...
建议如何修改行为?