How to implement a @FieldBridge to an @EmbeddedId field

Viewed 1067

When there is an @EmbeddedId field, a custom Field Bridge should be implemented. There is a Feature opened about it https://hibernate.atlassian.net/browse/HSEARCH-1879. But it isn't ready yet.

In this case, the interface correct to implement is TwoWayFieldBridge?

Below is my implementation for a composite ID with 5 fields.

public class ChavePrimariaAcompanhamentoBridge implements TwoWayFieldBridge {

    @Override
    public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {

        AcompanhamentoPK chavePrimaria = (AcompanhamentoPK) value;

        Integer ano = chavePrimaria.getAno();
        Integer mes = chavePrimaria.getMes();
        Long codigoCredenciada = chavePrimaria.getCredenciada().getCodigo();
        Long codigoPosto = chavePrimaria.getPostoAtendimento().getCodigo();
        Integer numeroSequencial = chavePrimaria.getNumeroSequencial();

        luceneOptions.addNumericFieldToDocument("mes", mes, document);
        luceneOptions.addNumericFieldToDocument("ano", ano, document);
        luceneOptions.addNumericFieldToDocument("credenciada.codigo", codigoCredenciada, document);
        luceneOptions.addNumericFieldToDocument("postoAtendimento.codigo", codigoPosto, document);
        luceneOptions.addNumericFieldToDocument("numeroSequencial", numeroSequencial, document);
    }

    @Override
    public Object get(String name, Document document) {

        AcompanhamentoPK chavePrimaria = new AcompanhamentoPK();
        chavePrimaria.setMes(Integer.valueOf(document.get("mes")));
        chavePrimaria.setAno(Integer.valueOf(document.get("ano")));
        chavePrimaria.setCredenciada(new Credenciada(Long.valueOf(document.get("credenciada.codigo"))));
        chavePrimaria.setPostoAtendimento(new CadastroPostoAtendimento(Long.valueOf(document.get("postoAtendimento.codigo"))));
        chavePrimaria.setNumeroSequencial(Integer.valueOf(document.get("numeroSequencial")));

        return chavePrimaria;
    }

    @Override
    public String objectToString(Object value) {
        AcompanhamentoPK chavePrimaria = (AcompanhamentoPK) value;

        return chavePrimaria.toString();
    }

}

1 - Is there another best way to make it?

2 - Is there any error(about concepts) in this implementation?

3 - What is the objectToString method used for? It is important?

I am making this question because I haven't found any documentation about it, so I am not sure.

1 Answers
Related