2012-01-25 12 views
17

No soy inteligente con la documentación de ORMlite. ¿Es posible declarar en clase, que este parámetro es una clave externa?Compatibilidad con la clave foránea de Android ORMlite

p. Ej. Tengo tabla de clientes:

@DatabaseTable(tableName = "customer") 
public class Customer { 
    @DatabaseField(id = true) 
    private String customerName; 

    @DatabaseField 
    private String customerSurname; 

    @DatabaseField(foreign = true) 
    private String accountNameHolder; 

    @DatabaseField 
    private int age; 

    public Customer() { 
    } 
} 

AccountNameHolder debe apuntar hacia CampoBaseDatos nombre de la tabla de cuentas. ¿Como hacer eso? He encontrado solo el parámetro foreign = true, pero no hay nada acerca de qué parámetro y de qué tabla representa.

Gracias

+2

Compruebe [this] (http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#SEC29) si es útil. –

+0

http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#Foreign-Objects –

Respuesta

37

AccountNameHolder debe apuntar hacia CampoBaseDatos nombre de la tabla de cuentas. ¿Como hacer eso?

No estoy exactamente seguro de lo que quiere, pero, posiblemente, debería cambiar su campo extranjero para ser el real tipo en lugar de un nombre:

@DatabaseField(foreign = true) 
private Account account; 

Internamente, ORMLite almacenará un campo account_id (tal vez el nombre de la cadena) en la tabla Customer, pero no tiene que preocuparse por eso. Recuerde que cuando consulte un Customer, el Account que está configurado en el campo account tendrá el campo de identificación establecido. Para que ORMLite también busque la cuenta, deberá configurar el foreignAutoRefresh=true.

Como señaló @Lalit, aquí hay documentación sobre este tema. Hemos dedicado mucho tiempo a la documentación, por lo que debería ser útil.

Además, existe cierta example code about foreign fields.

Espero que esto ayude.

+0

¿Cómo puedo definir el nombre de la columna foránea para utilizar para la búsqueda si no es el PK de la misma (es decir, en el ejemplo - si no es account.id)? Estoy buscando algo así como una anotación foreignColumnName, pero no existe. La razón es que estoy usando una base de datos existente (no creada por ORMLite) con nombres de columna fijos y FK ya definidos. Una restricción es una restricción uno-a-uno de una columna varchar, que no es la PK de la otra tabla, aunque es única. –

+1

'foreignColumnName' se agregó a la anotación' DatabaseField' en la versión 4.39 lanzada en abril de 2012 @MathiasLin. – Gray

+0

@Gray mientras miro los registros de la etiqueta 'ndroidCompiledStatement' Veo que ORMLite crea instrucciones clave primarias (INTEGER PRIMARY KEY AUTOINCREMENT) para campo anotado como clave principal, pero no crea ninguna declaración para campos anotados como clave externa (FOREIGN KEY (X_Id) REFERENCIAS Personas (Y_Id)). ¿Podría explicar por qué no se ejecuta para claves extranjeras? – Piotr

Cuestiones relacionadas