困扰多对多关系

匿名人类

我有一个应用程序,其中所有者对象可以有许多帐户对象,而帐户对象可以有许多所有者对象。我想到了使用多对多关系进行建模的方法,但是后来我意识到,可能还需要创建Account对象,在这些对象中,无法立即确定所有者,或者可能在创建帐户之后的将来创建所有者。因此,我不相信我可以使用Grails多对多关系(我认为)。所以,我只是在Owner类中有一个属性,它是一个帐户ID的列表(这将是所有者的Accounts引用),而在Account类中的一个属性是一个所有者的ID列表(这将是该帐户的ID)。业主参考)。还有更好的主意吗?我觉得这太过时了,类似于C ++指针的实现方式。

穆罕默德·阿米尔·塔里布(Muhammad Aamir Talib)

您可以创建第三个域来解决这种关系

class Owner{
    ...

    Set<Object> getObjects() {
        OwnerObject.findAllByOwner(this).collect { it.object } as Set // or replace with optimized criteria
    }
    ...
}

class Object{
    ...

    Set<Owner> getOwners() {
        OwnerObject.findAllByObject(this).collect { it.owner } as Set // or replace with optimized criteria
    }
    ...
}


class OwnerObject implements Serializable {

    Owner owner
    Object object

    boolean equals(other) {
        if (!(other instanceof OwnerObject)) {
            return false
        }
        other.owner?.id == owner?.id && other.object?.id == object?.id
    }

    static OwnerObject get(long ownerId, long objectId) {
        find 'from OwnerObject where owner.id=:ownerId and object.id=:objectId',
                [ownerId: ownerId, objectId: objectId]
    }

    static OwnerObject create(Owner owner, Object object, boolean flush = false) {
        new OwnerObject(owner: owner, object: object).save(flush: flush, insert: true)
    }

    static boolean remove(Owner owner, Object object, boolean flush = false) {
        OwnerObject instance = OwnerObject.findByOwnerAndObject(owner, object)
        if (!instance) {
            return false
        }
        instance.delete(flush: flush)
        true
    }

    static void removeAll(Owner owner) {
        executeUpdate 'DELETE FROM OwnerObject WHERE owner=:owner', [owner: owner]
    }

    static void removeAll(Object Object) {
        executeUpdate 'DELETE FROM OwnerObject WHERE object=:object', [object: object]
    }

    static mapping = {
        id composite: ['object', 'owner']
        version false
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章