我试图将两个一对多个命令的收藏字段映射成相同的值。字段有不同的过滤要求。因此,一个字段将有一个项目从另一个字段中过滤出来。
这里列出实体的相关部分。
public class OptionValueSet extends ConfigurationDomainObject {
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = OPTION_VALUE_SET_ID_COLUMN, nullable = false)
@IndexColumn(name = "option_index", nullable = false)
@Where(clause = OBSOLETE_FILTER)
private final List<OptionValue> allOptions = new java.util.ArrayList<OptionValue>();
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = OPTION_VALUE_SET_ID_COLUMN, nullable = false, insertable = false, updatable = false)
@IndexColumn(name = "option_index", nullable = false)
@Where(clause = OBSOLETE_FILTER + " AND disabled = 0 ")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Immutable
private final List<OptionValue> options = new java.util.ArrayList<OptionValue>();
...
}
和例外
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.casenet.domain.configuration.screen.OptionValue column: option_value_set_id (should be mapped with insert="false" update="false") at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:670) at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:692) at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:714) at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:468) at org.hibernate.mapping.RootClass.validate(RootClass.java:215) at org.hibernate.cfg.Configuration.validate(Configuration.java:1135) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1320) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) ... 137 more
好奇的是, 我正在解开使用同一个冬眠字段的两个使用案例。 目前, 过滤器打开了一个来隐藏禁用选项Values, 剩下一个来编辑它们。 然而, @ Filter 注释干扰了缓存。 我必须在不改变 DB 基本方案的情况下解决这个问题。 我们在释放周期里太迟, 无法做更激进的事情 。