使用ManyToManyMapping

时间:2018-12-28 18:29:16

标签: jpa eclipselink

我正在尝试查找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 ...

建议如何修改行为?

0 个答案:

没有答案