проиндексированный встроенный идентификатор Lucene - PullRequest
0 голосов
/ 26 октября 2018

Я новичок в lucene hibernate. У меня есть сущность

@Indexed
@Table
@Entity
public class PerEntity {

    /** The id. */
    @EmbeddedId
    @IndexedEmbedded
    @SortableField
    @FieldBridge ( impl = KeyFieldBridge.class )
    private PrimaryKey composedId;

public PrimaryKey getComposedId() {
        return composedId;
    }

    public void setComposedId( PrimaryKey composedId ) {
        this.composedId = composedId;
    }
}

и PrimaryKey, исключая геттер и сеттер.

@Embeddable
public class PrimaryKey implements Serializable {

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 1L;

    /** The id of object .Database primary key */
    @Column ( name = "id" )
    @Type ( type = "uuid-char" )
    private UUID id;

    /** The version id of object.Database primary key */
    @GeneratedValue ( strategy = GenerationType.AUTO )
    @Column ( name = "version_id" )
    private int versionId;
}

Основными и другими методами являются

public static void main( String[] args ) {
        FullTextSession fullTextSession = Search.getFullTextSession( SuSHibernateUtilDB.buildSessionFactory().openSession() );
        try {
            fullTextSession.createIndexer().startAndWait();
        } catch ( Exception e ) {
            ExceptionLogger.logException( e, e.getClass() );
        }
        QueryParser luceneParser = new MultiFieldQueryParser( getEntityFields(), analyzer );
        org.apache.lucene.search.Query parse = luceneParser.parse( "*" );
        org.hibernate.search.FullTextQuery hibQuery = fullTextSession.createFullTextQuery( parse, clazz );
        List< ? > list = ( List< ? > ) hibQuery.getResultList();
    }

private static String[] getEntityFields() {
    List< String > allFieldNames = getLuceneIndexedFields( PerEntity.class );
    return allFieldNames.toArray( new String[ 0 ] );
}

Существует также класс полевого моста

public class KeyFieldBridge implements TwoWayFieldBridge {

    /**
     * {@inheritDoc}
     */
    @Override
    public void set( String name, Object value, Document document, LuceneOptions luceneOptions ) {
        if ( value != null ) {
            PrimaryKey primaryKey = ( PrimaryKey ) value;
            luceneOptions.addFieldToDocument( name, primaryKey.getId().toString(), document );
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Object get( String name, Document document ) {
        return UUID.fromString( document.get( name ) );
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String objectToString( Object object ) {
        PrimaryKey primaryKey = ( PrimaryKey ) object;
        return primaryKey.getId().toString();
    }

Я не могу понять, что делать? какие аннотации используются для индексации идентификатора CommeId? а как применить сортировку по id? когда я запускаю метод main, я получаю исключение, т. е.

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.util.UUID de.isko.software.simuspace.suscore.data.entity.PrimaryKey.id] by reflection for persistent property [de.isko.software.simuspace.suscore.data.entity.PrimaryKey#id] : 2c370ab9-3335-4e35-ab4a-7c6c3ffc024b
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
    at org.hibernate.search.query.hibernate.impl.FullTextQueryImpl.list(FullTextQueryImpl.java:234)
    at org.hibernate.search.query.hibernate.impl.FullTextQueryImpl.getResultList(FullTextQueryImpl.java:124)

Пожалуйста, любую помощь оценили

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...