2つの順序付けられたコレクションの1対多のフィールドを同じ値にマップしようとしています。フィールドにはさまざまなフィルタリング要件があります。したがって、一方のフィールドには、もう一方のフィールドから除外されたアイテムが含まれます。
これがエンティティの関連部分です。
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>();
...
}
そして例外
原因:org.hibernate.MappingException:エンティティのマッピングで繰り返される列:com.casenet.domain.configuration.screen.OptionValue列:option_value_set_id(insert = "false" update = "false"でマッピングする必要があります) org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:670)で org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:692)で org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:714)で org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:468)で org.hibernate.mapping.RootClass.validate(RootClass.java:215)で org.hibernate.cfg.Configuration.validate(Configuration.java:1135)で org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1320)で org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)で org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)で ...137詳細
不思議なことに、私は同じ休止状態のフィールドを使用している2つのユースケースを解きほぐしているところです。現在、フィルターは無効になっているOptionValuesを非表示にするために一方でオンになっており、それらを編集するためにもう一方でオンのままになっています。ただし、@Filterアノテーションはキャッシュを妨害しています。基になるDBスキーマを変更せずにこれを修正する必要があります。リリースサイクルが遅すぎて、もっと過激なことをすることはできません。