标签: one-to-many

何时在Doctrine2中维持反向关系是否值得?

在Doctrine手册中,尽可能Constrain关系下,它给出了"消除非必要关联"和"尽可能避免双向关联"的建议.我不明白什么标准会使协会"必不可少".

我之所以这么说,是因为看起来你经常想要从一对多关系的一方而不是多方方面.例如,我想获取所有用户的活动PhoneNumbers,而不是获取所有活动的PhoneNumbers及其关联的用户.当您必须遍历多个一对多关系时,这变得更加重要,例如,如果您希望在过去两天内看到所有具有MissedCall的用户(MissedCall-> PhoneNumber-> User).

这是简单情况下反向关联的外观:

SELECT * FROM User u
LEFT JOIN u.PhoneNumbers p WITH p.active
Run Code Online (Sandbox Code Playgroud)

如果有一种方法可以在DQL中以相​​反的方向跨越给定关系,那将会更加明智,如下面的原始SQL:

SELECT * FROM User u
LEFT JOIN PhoneNumber p ON p.User_id = u.id AND p.active
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么他们提出这个建议,在什么情况下值得忽略?

- 编辑 -

如果有缓解因素或其他解决方法,请给我简单的示例代码或链接.

当没有定义逆时,我没有看到任何方法来遍历关系的逆,所以我将假设构建自定义DQL 实际上不是一个解决方案 - 有一些与SQL 无关的连接是不可能的无论如何,DQL和水合作用可能都行不通.这就是为什么我不明白为什么添加反向关系是一个坏主意.

doctrine relational-database one-to-many dql doctrine-orm

13
推荐指数
1
解决办法
934
查看次数

如何处理与存储库模式的表关系?

我正在将存储库模式实现为ASP.NET MVC站点的一部分.我见过的大多数关于存储库的例子都相当简单.例如,这是一个典型的抽象存储库接口.

public interface IRepository<TEntity>
{
    IQueryable<TEntity> All();
    TEntity FindBy(int id);
    TEntity FindBy(Expression<Func<TEntity, bool>> expression);
    IQueryable<TEntity> FilterBy(Expression<Func<TEntity, bool>> expression);
    bool Add(TEntity entity);
    bool Update(TEntity entity);
    bool Delete(TEntity entity):
}
Run Code Online (Sandbox Code Playgroud)

我很清楚如何使用这样的存储库来添加,更新,删除或获取单一类型的实体.但是,您如何处理创建和操纵不同类型之间的一对多或多对多关系?

假设您有一个Item类型,其中每个项目都分配给a Category.您将如何通过存储库进行此分配?这应该取决于Update(Category c)和/或Update(Item i)方法来确定需要与正在更新的元素建立什么关系?或者应该有一个明确的AssignCategoryToItem(Item i, Category c)方法?

如果它有任何区别我正在使用Fluent NHibernate来实现我的具体存储库.

asp.net-mvc many-to-many one-to-many fluent-nhibernate repository-pattern

12
推荐指数
1
解决办法
4216
查看次数

JPA/Hibernate OneToMany Mapping,使用复合PrimaryKey

我目前正在努力使用复合主键类的方案正确的映射注释.首先,我想用文字来实现:

我有2个类:group和FieldAccessRule.组可以有多个FieldAccessRules,而FieldAccessRule只有一个组分配.到目前为止,修改这个问题不是一个问题(简化):

public class Group{
    ...
    @OneToMany(mappedBy = "group")
    private Set<FieldAccessRule> fieldAccessRules;
    ... 
}
Run Code Online (Sandbox Code Playgroud)

并为FieldAccessRule:

public class FieldAccessRule {
    ...
    @ManyToOne
    @JoinColumn(name = "group_id")
    private Group group;
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我决定使用复合PK作为FieldAccessRule,因为规则对于ONE Group和ONE Field应该是唯一的.它看起来像这样:

@Embeddable
public class FieldAccessRulePK implements Serializable{
    private String fieldKey;
    private Group group;
    ...
}
Run Code Online (Sandbox Code Playgroud)

和ofc.FieldAccessRule需要更改为

public class FieldAccessRule {
    ...
    @EmbeddedId
    private FieldAccessRulePK fieldAccessRulePK;
    ...
}
Run Code Online (Sandbox Code Playgroud)

如何为Group的FieldAccessRuleSet创建正确的映射?这样做,我得到:

在属性"fieldAccessRules"中,"映射者"值"组"无法解析为目标实体上的>属性.

什么是创建从Group到PrimaryKey的PART的映射的正确方法?

编辑:我知道发现,使用

public class Group{
    ...
    @OneToMany(mappedBy = "fieldAccessRolePK.group")
    private Set<FieldAccessRule> fieldAccessRules;
    ... 
}
Run Code Online (Sandbox Code Playgroud)

完全按预期工作.它编译得很好,它可以很好地创建数据库,并且在加载具有预定义角色的组之后,它们可以按预期使用.

但是,Eclipse仍然说

在属性"fieldAccessRules"中,"映射的"值"fieldAccessRulePK.group"无法解析为目标实体上的属性.

我不确定,如果忽略错误并且"假设"每一件事情都很好......(我发现一个帖子,据说已经说过,Hibernate支持模式attr1.attr2的映射但不支持JPA确认. )

jpa one-to-many embeddable

12
推荐指数
1
解决办法
2万
查看次数

模型自依赖(一对多字段)实现

我想实现一个具有自我依赖性的模型.假设实例People_A可能依赖于People_B和People_C.我首先使用多对多关键实现此模型.

class People(models.Model):

dependency = models. ManyToManyField ('self', blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

但结果是,如果People_A依赖People_B将导致People_B也依赖于People_A.这是我不想要的.

然后我用外键实现它.

class People(models.Model):

dependency = models.ForeignKey('self', blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

但这也行不通.如果People_A依赖People_B,那么其他任何人都不能依赖People_B.它将涵盖具有最新依赖性的旧依赖项.

任何线索都会感激不尽

django one-to-many

12
推荐指数
1
解决办法
1886
查看次数

Hibernate与其他审计表连接表

我有一个带有修订的审计表,我想创建另一个与审计表修订版具有一对多关系的表.审计修订将指向新表数据.我怎样才能做到这一点?

hibernate one-to-many hibernate-envers

12
推荐指数
1
解决办法
1398
查看次数

如何在一对多关系中复制另一个表的外键

我有三个表结构:tournament,groupteam.所述tournamentgroup表具有一个一对多关系,groupteam具有一个对多关系如下所示.

表结构

我如何复制的价值tournament_id,从group表到group_tournament_idteam表?

我正在寻找一个使用create语句来实现这个目标的答案

create table team (
    id serial primary key, 
    group_id int references group, 
    group_tournament_id int references group(tournament_id)
);
Run Code Online (Sandbox Code Playgroud)

当然这不起作用,因为为了引用它必须是唯一的东西,在这种情况下,tournament_id不是唯一的

当我插入团队时,我需要一种标准的方法来将tournament_idfrom 的值复制group到'team'表中group_tournament_idgroup_id insidetable

编辑:不再需要在symfony中回答,只需postgreSQL即可

postgresql database-design one-to-many table-relationships postgresql-9.6

12
推荐指数
1
解决办法
646
查看次数

PostgreSQL - "多态表"与3个表

我正在使用PostgreSQL 9.5(但升级可以说是9.6).

我有权限表:

CREATE TABLE public.permissions
(
  id integer NOT NULL DEFAULT nextval('permissions_id_seq'::regclass),
  item_id integer NOT NULL,
  item_type character varying NOT NULL,
  created_at timestamp without time zone NOT NULL,
  updated_at timestamp without time zone NOT NULL,
  CONSTRAINT permissions_pkey PRIMARY KEY (id)
)
-- skipping indices declaration, but they would be present
-- on item_id, item_type
Run Code Online (Sandbox Code Playgroud)

3个表用于多对多关联

-companies_permissions(+指数声明)

CREATE TABLE public.companies_permissions
(
  id integer NOT NULL DEFAULT nextval('companies_permissions_id_seq'::regclass),
  company_id integer,
  permission_id integer,
  CONSTRAINT companies_permissions_pkey PRIMARY KEY (id),
  CONSTRAINT fk_rails_462a923fa2 FOREIGN KEY …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql one-to-many polymorphic-associations

12
推荐指数
2
解决办法
1437
查看次数

Django一对多模型

以下模型描述了漏洞以及引用该漏洞的Internet上的URL.假设每个URL只讨论1个漏洞,并且许多URL将讨论该漏洞.这是布局模型的正确方法吗?

class Vuln(models.Model):
  pub_date = models.DateTimeField("Publication Date")
  short_description = models.CharField("Description", max_length=70)

  reference_urls = models.ForeignKey(Url, unique=True, blank=True, verbose_name="Reference URLs")
  vendor = models.ForeignKey(Vendor, verbose_name="Vendor")

class Url(models.Model):
  url = models.URLField("URL", max_length=200)
Run Code Online (Sandbox Code Playgroud)

Admin应用程序为参考URL提供了一个"选择"框,这不是我想要的.当我添加新的漏洞对象时,已输入的所有现有URL都显示在该下拉列表中,这又是不自然的.我觉得这应该与博客评论的方式非常相似,即.评论适用于单个博客条目,而不是其他任何一个博客条目可能有很多评论.我如何在Django模型中表达这一点?

python django model one-to-many

11
推荐指数
1
解决办法
1万
查看次数

JPA一对多删除并将foregn键设置为null

我使用Spring Data,JPA,Hibernate和MySQL.事件和类别之间有一对多的关系.显然,一个事件只能有一个类别,一个类别可以分配许多事件.当我尝试删除Category时出现问题,如果任何事件持有此类别的外键,则会出现错误.我想在删除类别时将Event表中的外键设置为null.目前,我通过在删除Category之前将其更新为null,在代码中显式设置外键来更新所有事件.有没有办法在使用注释时这样做?

这是我的分类:

    @Entity
    @Table(name = "category")
    public class Category implements Serializable{
    @OneToMany(mappedBy="category", targetEntity=Event.class, fetch=FetchType.LAZY, cascade=
{CascadeType.DETACH,  CascadeType.MERGE,  CascadeType.PERSIST, CascadeType.REFRESH})

    public Set<Event> getEvents_category() {
    return events_category;
    }
    }
Run Code Online (Sandbox Code Playgroud)

和Event类:

@Entity
   @Table(name = "event")
   public class Event implements Serializable{

    @ManyToOne(cascade={CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST,
CascadeType.REFRESH})
    @JoinColumn(name="events_dancestyle")
    public DanceStyle getDanceStyle() {
    return danceStyle;
    }
    }
Run Code Online (Sandbox Code Playgroud)

我已经看过很多次讨论这个话题,但我还没有看到任何解决方案.

mysql hibernate jpa one-to-many

11
推荐指数
1
解决办法
2万
查看次数

Doctrine OneToMany关系错误

我试图通过Symfony2(2.3.0)使用Doctrine(2.2.3+)在我的数据库中的对象上建立一些ManyToOne/OneToMany关系,并得到一个奇怪的错误.以下是对象的相关部分(一个产品的许多属性):

/**
 * Product
 *
 * @ORM\Table(name="product")
 * @ORM\Entity
 */
class Product
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    ...

    /**
     *
     * @OneToMany(targetEntity="ProductAttributes", mappedBy="product")
     */
    protected $product_attributes;

    public function __construct() {
        $this->product_attributes = new \Doctrine\Common\Collections\ArrayCollection();
    }
}

/**
 * ProductAttributes
 *
 * @ORM\Table(name="product_attributes")
 * @ORM\Entity
 */
class ProductAttributes
{
    /**
     * @var integer
     *
     * @ORM\Column(name="pa_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $pa_id;

    /**
     * @var integer
     *
     * …
Run Code Online (Sandbox Code Playgroud)

one-to-many many-to-one symfony doctrine-orm

11
推荐指数
1
解决办法
1万
查看次数