subclases que pueblan en Jooq

ps0604:

Tengo la siguiente clase Java:

public class Font {

   private String fontFamily;

   private int fontSize;

   // other members and getters/setters
} 

La clase Font se utiliza en esta clase:

public class RichText {

   private int code;

   private String richString;

   private Font titleFont;

   private Font subtitleFont;

   // other members and getters/setters
} 

Ahora, tengo una sola tabla en la base de datos para almacenar RichText, nota que me aplasté las clases de fuentes para evitar la creación de una tabla adicional:

CREATE TABLE rich_text (

   code int,

   rich_string text,

   fontTitleFamily varchar(20),

   fontTitleSize int,

   fontSubtitleFamily varchar(20),

   fontSubtitleSize int,

   .....

);

Leí la rich_texttabla usando Jooq de este modo:

    Record rec = create.select()
            .from(RICH_TEXT)
            .where(RICH_TEXT.CODE.eq(code))
            .fetchAny();

    if (rec == null)
        throw new RecordNotFoundException();

    RichText richText = new RichText();
    rec.into(richText);

Pero esto no llena las clases de fuente porque los nombres son diferentes. No quiero para normalizar esta tabla, ya que sólo tendrá dos fuentes.

¿Hay una manera de Jooq a anotar o configurar en el generador de la relación entre las columnas de la base de datos y los campos de una subclase?

wallek876:

Puede utilizar una RecordMapperde personalizar cómo desea que sus clases sean asignadas a un registro, no sé cómo sus constructores se ven como, pero un ejemplo en línea podrían ser:

RichText richText = create.select()
            .from(RICH_TEXT)
            .where(RICH_TEXT.CODE.eq(code))
            .fetchOne(new RecordMapper<Record, RichText>() {

                @Override
                public RichText map(Record record) {

                    RichText richText = new RichText(
                            record.get(RICH_TEXT.CODE),
                            record.get(RICH_TEXT.RICH_STRING ),
                            new Font(
                                record.get(RICH_TEXT.FONTTITLEFAMILY), 
                                record.get(RICH_TEXT.FONTTITLESIZE)
                            ),
                            new Font(
                                record.get(RICH_TEXT.FONTSUBTITLEFAMILY), 
                                record.get(RICH_TEXT.FONTSUBTITLESIZE)
                            )

                        );

                    return richText;

                }
            });

He escrito esto sobre la marcha, por lo que su posible que me dieron algunos nombre de campo equivocado.

También puede establecer una costumbre RecordMapperProviderque pueda volver personalizada RecordMapperen la configuración Jooq.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=191899&siteId=1
Recomendado
Clasificación