I’m currently using ActiveAndroid, and have been trying to get a many-to-many relationship to work for the past few hours, however I just can’t get it to work. I hope you ca
Work like a charm:
Client class
@Table(name = "Client")
public class Client extends Model{}
Contract class
@Table(name = "Contract")
public class Contract extends Model{}
Relation between Client and Contract
@Table(name = "ClientContract")
public class ClientContract extends Model {
@Column(name = "Client", onDelete = Column.ForeignKeyAction.CASCADE)
public Client client;
@Column(name = "Contract", onDelete = Column.ForeignKeyAction.CASCADE)
public Contract contract;
}
Database helper
public class DBHelper {
public List getRelatedContracts(Client client) {
List contracts = null;
if (client != null && client.isCreated()) {
contracts = new Select()
.from(Contract.class)
.innerJoin(ClientContract.class).on("ClientContract.Contract = Contract.id")
.where("ClientContract.Client = ?", client.getId())
.execute();
}
return contracts;
}
public List getRelatedClients(Contract contract) {
List clients = null;
if (contract != null && contract.isCreated()) {
clients = new Select()
.from(Client.class)
.innerJoin(ClientContract.class).on("ClientContract.Client = Client.id")
.where("ClientContract.Contract = ?", contract.getId())
.execute();
}
return clients;
}
// get relation
public ClientContract getClientContract(Client client, Contract contract) {
ClientContract clientContract = null;
if (client != null && contract != null && client.isCreated() && contract.isCreated()) {
clientContract = new Select().from(ClientContract.class)
.where("Client = ?", client.getId())
.where("Contract = ?", contract.getId())
.executeSingle();
}
return clientContract;
}
// add relation
public ClientContract addClientContract(Client client, Contract contract) {
ClientContract clientContract = getClientContract(client, contract);
if (client != null && contract != null && clientContract == null) {
if (client.getId() == null)
client.save();
if (contract.getId() == null)
contract.save();
clientContract = new ClientContract();
clientContract.client = client;
clientContract.contract = contract;
clientContract.save();
}
return clientContract;
}
// delete relation
public void deleteClientContract(Client client, Contract contract) {
ClientContract clientContract = getClientContract(client, contract);
if (clientContract != null && contract.isCreated())
clientContract.delete();
}
}