android ormlite

android - ORMLite no está cargando campos foráneos secundarios



(1)

Estoy usando ORMLite 4.42 para una aplicación de Android. Tengo una entidad que tiene campos extranjeros. Estos campos tienen campos extranjeros también. El problema es que cuando obtengo un elemento de la entidad raíz, solo se carga el primer nivel de campos foráneos. Los demás niveles son nulos.

En la base de datos todo parece estar bien. La identificación es correcta. ¿Alguna ayuda?

Editar con modelos .

El modelo de equipo siempre es nulo, cuando hago una consulta por ID. Pero si pregunto en toda la tabla, entonces me da acceso a todo.

TABLA DE INCIDENTE

@DatabaseField(generatedId=true) private UUID id; @DatabaseField(foreign=true, foreignAutoRefresh=true, canBeNull=false) private UserEntity user; @DatabaseField(dataType = DataType.DATE, canBeNull=true) private Date date; @DatabaseField(foreign=true, foreignAutoRefresh=true, canBeNull=true) private EquipmentEntity equipment;

EQUIPOS DE MESA

@DatabaseField(generatedId=true) private UUID id; @DatabaseField(canBeNull=false, unique=true) private String serial; @DatabaseField(foreign=true, foreignAutoRefresh=true, canBeNull=false) private EquipmentTypeEntity type;

TIPO DE EQUIPO DE MESA

@DatabaseField(generatedId=true) private UUID id; @DatabaseField(canBeNull=true) private String type; @DatabaseField(foreign=true, foreignAutoRefresh=true, canBeNull=false) private EquipmentModelEntity model;

MODELO DE EQUIPOS DE MESA

@DatabaseField(generatedId=true) private UUID id; @DatabaseField(canBeNull=false) private String model;


Estoy usando ORMLite 4.42 para una aplicación de Android. Tengo una entidad que tiene campos extranjeros. Estos campos tienen campos extranjeros también. El problema es que cuando obtengo un elemento de la entidad raíz, solo se carga el primer nivel de campos foráneos. Los demás niveles son nulos.

Bien, esto es por diseño. ORMLite limita específicamente la cantidad de veces que actualiza automáticamente un subelemento. Esto se hizo para protegerse contra los enormes árboles de objetos que se tragaban la memoria y contra los objetos autorreferenciales.

Para citar los documentos de foreignAutoRefresh :

NOTA: Para protegerse contra la recursión, hay un par de lugares donde la actualización automática ha sido limitada. Si está actualizando automáticamente una clase que tiene un campo con foreignAutoRefresh establecido en true o si actualiza una clase con una colección extranjera, en ambos casos, el campo resultante se establecerá en nulo y no se actualizará automáticamente. Siempre puede llamar a actualizar en el campo directamente si lo necesita.

NOTA: Si tiene un campo actualizado automáticamente que es un objeto que también tiene un campo actualizado automáticamente, es posible que desee ajustar el valor de maxForeignAutoRefreshLevel. Vea abajo.

Para citar los documentos de maxForeignAutoRefreshLevel :

Esto se puede usar para establecer el número máximo de niveles para configurar objetos extraños. Por ejemplo, si tiene una pregunta que tiene un campo externo de la mejor respuesta, y la respuesta tiene un campo externo para la pregunta correspondiente, entonces la configuración de un lado a otro puede aumentar. Esto es especialmente un problema con los campos que se actualizan automáticamente cuando busca la Pregunta que podría causar un bucle infinito. De forma predeterminada, ORMLite solo pasa por 2 niveles, pero puede disminuirlo a 1 (0 no es válido) o aumentarlo. Cuanto mayor sea el número, más transacciones de base de datos sucederán cuando cargue su pregunta.

Si aumenta el maxForeignAutoRefreshLevel para que sea más, se emitirán las consultas adicionales para actualizar los elementos.

@DatabaseField(foreign=true, foreignAutoRefresh=true, canBeNull=true, maxForeignAutoRefreshLevel=3) private EquipmentEntity equipment;