[
https://hibernate.onjira.com/browse/HSEARCH-1076?page=com.atlassian.jira....
]
Elmer van Chastelet commented on HSEARCH-1076:
----------------------------------------------
After a lot of debugging, I finally found the problem.
Our compiler generates the java code with annotations. Search annotations were set on the
getters of fields. Java field names were prefixed with an underscore (e.g. private String
_text;), while the getters didn't include the underscore. This resulted in a mismatch
during dirty checking (dirty property '_text' is not matched with the metadata
property 'text'*) in the OnPostUpdate method of the FullTextIndexEventListener
-> index not updated.
This is probably considered bad styling, not sure if it should be considered as
'bug' in the reflection manager.
* the method XClass.getDeclaredProperties( XClass.ACCESS_PROPERTY ) returns
'text' as property name, while the getter gets the field '_text'.
Simple entity changes not reflected in index
--------------------------------------------
Key: HSEARCH-1076
URL:
https://hibernate.onjira.com/browse/HSEARCH-1076
Project: Hibernate Search
Issue Type: Bug
Components: engine
Affects Versions: 3.4.2, 4.1.0.CR2
Environment: Unit test on Ubuntu 11.10 x64
Reporter: Elmer van Chastelet
Priority: Critical
Labels: search
I was unable to find a unit test which tests if an entity change on a searchable String
field (probably also other types) is reflected in the index. That's probably the
reason I came across this serious issue.
I have changed an existing test to see if my expectations were true, and indeed: solely
changing a String property (searchable) of an entity won't trigger an update to the
index.
I will add a unit test for this particular case. For now, the failing code from an
altered existing test:
{code:title=snippet from altered NestedEmbeddedTest.java}
s.clear();
tx = s.beginTransaction();
product = ( Product ) s.get( Product.class, product.getId() );
product.setNwField("value1");
tx.commit();
s.clear();
session = Search.getFullTextSession( s );
tx = s.beginTransaction();
QueryParser parser2 = new QueryParser( TestConstants.getTargetLuceneVersion(),
"nwField", TestConstants.standardAnalyzer );
query = parser2.parse( "value1" );
result = session.createFullTextQuery( query, Product.class ).list();
assertEquals( "change on simple string field not reflected in root index", 1,
result.size() );
tx.commit();
{code}
{code:title=addition to Product.java}
@Field(store = Store.YES)
private String nwField;
public String getNwField(){
return nwField;
}
public void setNwField(String fld){
nwField = fld;
}
{code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira