非推奨のCollectionOfElementsの代わりにJPAElementCollectionを使用するようにコードをリファクタリングする際に問題が発生しました。次のスタックトレースが表示されます。
org.hibernate.MappingException:次のタイプを判別できませんでした:java.util.Set、テーブル:UserFilter、列:[org.hibernate.mapping.Column(element)] at org.hibernate.mapping.SimpleValue.getType(SimpleValue .java:292)at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:276)at org.hibernate.mapping.Property.isValid(Property.java:207)at org.hibernate.mapping.PersistentClass.validate( PersistentClass.java:458)at org.hibernate.mapping.JoinedSubclass.validate(JoinedSubclass.java:63)at org.hibernate.cfg.Configuration.validate(Configuration.java:1149)at org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1334)org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
UserFilterで変更されたコードは次のとおりです。
//@CollectionOfElements
@ElementCollection(targetClass = String.class)
@CollectionTable(name="UserFilter_orgUnits", joinColumns=@JoinColumn(name="UserFilter_FILTER_ID"))
@Column(columnDefinition = "varchar(255)", name="element")
private Set<String> orgUnits = new HashSet<String>();
下位互換性のために、結合テーブル名と列名を指定しています。