java - There are multiple properties indexed against the same field name ..., but with different indexing settings. The behaviour is undefined -
getting next in log when run hibernate search application:
warn 23 jun 2014 15:08:51,623 org.hibernate.search.engine.metadata.impl.typemetadata:339 - hsearch000120: there multiple properties indexed against same field name 'foo.bar', different indexing settings. behaviour undefined.
i see warning beingness logged from:
private map<string, documentfieldmetadata> keyfieldmetadata(set<propertymetadata> propertymetadataset) { map<string, documentfieldmetadata> tmpmap = new hashmap<string, documentfieldmetadata>(); ( propertymetadata propertymetadata : propertymetadataset ) { ( documentfieldmetadata documentfieldmetadata : propertymetadata.getfieldmetadata() ) { documentfieldmetadata oldfieldmetadata = tmpmap.put( documentfieldmetadata.getname(), documentfieldmetadata ); if ( oldfieldmetadata != null ) { if ( !documentfieldmetadata.getindex().equals( oldfieldmetadata.getindex() ) ) { **log.inconsistentfieldconfiguration( documentfieldmetadata.getname()** ); } } } } ( documentfieldmetadata documentfieldmetadata : classbridgefields ) { tmpmap.put( documentfieldmetadata.getname(), documentfieldmetadata ); } if ( idpropertymetadata != null ) { ( documentfieldmetadata documentfieldmetadata : idpropertymetadata.getfieldmetadata() ) { tmpmap.put( documentfieldmetadata.getname(), documentfieldmetadata ); } } homecoming collections.unmodifiablemap( tmpmap ); } but i'm having problem figuring out purpose of code, or how code causing meet condition. appears happening on fields annotated @indexedembedded i've googled , found nil error.
i assume has been issue in code, updated hibernate search 4.2.0.final 4.5.1.final, , when warning began appear.
update
@entity @table(name = "data_providers") @immutable @embeddable @cache(usage = cacheconcurrencystrategy.read_only) public class edataprovider { private static final long serialversionuid = -4207808146855081627l; public static final string field_associations = "associations."; public static final string field_id = "id"; private list<edataprovider> associatedproviders; private long id; private boolean isinternal; private string name; private float priority; public edataprovider() { this(null, null); } /** * @param name * @param id */ public edataprovider(final string name, final long id) { super(); this.name = name; this.id = id; associatedproviders = new vector<edataprovider>(); } /** * @param newprovider */ public void addassociatedprovider(final edataprovider newprovider) { associatedproviders.add(newprovider); } @override public boolean equals(final object obj) { if (this == obj) { homecoming true; } if ((obj == null) || !(obj instanceof edataprovider)) { homecoming false; } final edataprovider other = (edataprovider) obj; if (!objectutil.equals(getid(), other.getid())) { homecoming false; } homecoming true; } @manytomany(fetch = fetchtype.lazy, cascade = { cascadetype.persist, cascadetype.merge }) @jointable(name = "data_provider_associations", joincolumns = { @joincolumn(name = "parent_id") }, inversejoincolumns = { @joincolumn(name = "child_id") }) @indexedembedded(depth = 1, prefix = field_associations) @cache(usage = cacheconcurrencystrategy.read_write) public list<edataprovider> getassociatedproviders() { homecoming associatedproviders; } @id @column(name = "id") @field(name = field_id) public long getid() { homecoming id; } @column(name = "name") public string getname() { homecoming name; } @column(name = "boost") public float getpriority() { homecoming priority; } @override public int hashcode() { homecoming encodingutil.makehashcode(31, getid()); } @column(name = "internal") public boolean isinternal() { homecoming isinternal; } public void removeassociatedprovider(final edataprovider newprovider) { associatedproviders.remove(newprovider); } /** * @param newassociatedproviders * associatedproviders set */ public void setassociatedproviders( final list<edataprovider> newassociatedproviders) { associatedproviders = newassociatedproviders; } /** * @param dataproviderid * dataproviderid set */ public void setid(final long dataproviderid) { id = dataproviderid; } public void setinternal(final boolean isinternal) { this.isinternal = isinternal; } /** * @param name * name set */ public void setname(final string name) { this.name = name; } /** * @param priority * priority set */ public void setpriority(final float priority) { this.priority = priority; } @override public string tostring() { homecoming string.format("provider:{id:%d, name:%s, priority:%f}", id, name, priority); } }
the id field annotated in kid object @field annotation included in parent object's index. parent object uses custom analyzer, there conflict in indexing settings. removed @field annotation kid object, errors went away.
java hibernate hibernate-search
No comments:
Post a Comment