ActiveAndroid Many-to-many relationship

前端 未结 3 1529
忘掉有多难
忘掉有多难 2021-01-05 06:33

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

3条回答
  •  误落风尘
    2021-01-05 07:06

    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();
        }
    }
    

提交回复
热议问题