标签: one-to-one

真的很简单的CoreData关系,但返回nil和null?

这个错误在过去的4个小时里一直在破坏我.

此外,当我交换它并获得用户数据时,然后消息数据... User.name将显示,但Message.message不会.所以数据肯定会进入,但它们之间的关系似乎被打破了.

在此输入图像描述

iphone entity-relationship core-data one-to-one ios

19
推荐指数
1
解决办法
2060
查看次数

在MySQL中实现一对一关系时确定外键

我有两个简单的表"items"和"orders".为简单起见,我们假设一个项目只能在一个订单中,或者一个订单只能包含一个项目.

现在,因为这可以使用简单的一对一关系实现,我可以执行以下操作:

我可以将orders表的主键添加到items表中,如下所示

//Table Items
item_id, item_name, order_id
1,        shoes,    1
2,        watch,    2

//Table Orders
order_id, customer
1,        James
2,        Rick
Run Code Online (Sandbox Code Playgroud)

或者我可以将items表的主键添加到orders表中,如下所示

//Table Items
    item_id, item_name
    1,        shoes
    2,        watch

//Table Orders
order_id, customer, item_id
1,        James,    1   
2,        Rick,     2
Run Code Online (Sandbox Code Playgroud)

哪一个是正确的,为什么?是否有任何指导线来决定哪个键在哪里?当然,常识会在上面的简单例子中起作用,但在复杂的例子中我们如何决定?

mysql database database-design entity-relationship one-to-one

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

Hibernate:@ManyToOne(fetch = FetchType.LAZY)不适用于非主键引用列

我有2张桌子:Order [OrderId(PK), OrderShipmentCode, ...]Shipment[ShipmentId(PK), ShipmentCode, ...].

Order课堂上,我声明shipment了如下字段:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "OrderShipmentCode", referencedColumnName = "ShipmentCode", insertable = false, updatable = false, nullable = false)
private Shipment shipment;
Run Code Online (Sandbox Code Playgroud)

当我得到列表时Order,Shipment也会加载(我看到很多单独的SELECT查询).但是我希望它Shipment是懒惰的,而不是与它一起提取Order.

对于其他表,如果引用的列是主键,则结果与预期一致(使用延迟加载).在我的情况下,ShipmentCode不是Shipment表的主键,并且Hibernate不使用延迟加载.

你能告诉我如何实现这个目标吗?

编辑: 查询代码如下:

Criteria criteria = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(Order.class);
List result = criteria.list();
Run Code Online (Sandbox Code Playgroud)

SQL查询是:1 Order表的SELECT语句和一堆SELECT语句Shipment

java hibernate jpa lazy-loading one-to-one

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

Hibernate中可选的一对一映射

如何在hibernate hbm文件中创建可选的一对一映射?例如,假设我有一个User和一个last_visited_pa​​ge表.用户可能有也可能没有last_visited页面.这是我在hbm文件中的当前一对一映射:

用户类:

<one-to-one name="lastVisitedPage" class="LastVisitedPage" cascade="save-update">
Run Code Online (Sandbox Code Playgroud)

LastVisitedPage类:

<one-to-one name="user" class="user" constrained="true" />
Run Code Online (Sandbox Code Playgroud)

上面的示例不允许创建没有最后访问过的页面的用户.新创建的用户尚未访问过任何页面.如何更改hbm映射以使userPrefs映射可选?

java database hibernate one-to-one

17
推荐指数
4
解决办法
2万
查看次数

AspNetUsers的ID作为单独表中的外键,一对一的关系

我上下打量,尝试了所有不同的方法,能够将AspNetUser表的外键存储在一个单独的Customer表中.我还是ASP.NET和实体框架的新手,但我已经阅读了不少帖子和文档.

目前这就是我所拥有的

楷模

public class Customer
{
    [Display (Name="Customer ID")]
    public int CustomerID { get; set; }

    public string UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual ApplicationUser ApplicationUser { get; set; }

}


 public class ApplicationUser : IdentityUser
{
    public virtual Customer Customer { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<Customer> Customers { get; set; }

    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

我引用了这个错误

无法确定类型"TestApplication.Models.Customer"和"TestApplication.Models.ApplicationUser"之间关联的主要结尾.必须使用关系流畅API或数据注释显式配置此关联的主要结尾.

我也试过这个人的方法:必须使用关系流畅的API或数据注释显式配置此关联的主要结尾

所以我注释掉了ForeignKey注释并使用了人的建议,使用了"modelBuilder"方法.当我更新我的数据库时,AspNetUsers表中的'Id'在Customers表中(这很好),但CustomerID作为ForeignKey也在AspNetUsers表中,这不是我想要的.

我想要的是AspNetUsers的'Id'作为ForeignKey在Customers表中.

c# database asp.net entity-framework one-to-one

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

Hibernate一对一,没有给定标识符的行存在异常

我需要两个实体之间的链接,所以我使用一对一

@Entity
@Table(name = "T_USER")
public class User implements Serializable {

    @Id
    @Column(name = "user_id")
    private int userId;

    @Column(name = "login")
    private String login;

    @OneToOne(optional = true)    
    @JoinColumn(name="login", referencedColumnName="person_id", nullable = true, insertable = false, updatable = false)
    private Person person;
}

@Entity
@Table(name = "T_PERSON")
public class Person implements Serializable {
    @Id
    @Column(name = "person_id")
    private String personId;

    @Column(name = "pin")
    private String pin;
}
Run Code Online (Sandbox Code Playgroud)

如果表T_USER中没有特定PERSON的项,user.getPerson会抛出异常:

org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [packagename.com.entity.Person#scabriou]
Run Code Online (Sandbox Code Playgroud)

但是如果我在db中的两个表之间有引用,那么getter就可以了!

java hibernate exception one-to-one

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

检查Django中是否存在OneToOne关系

现在我正在使用django 1.6

我有两个模型涉及一个OneToOneField.

class A(models.Model):
    pass

class B(models.Model):
    ref_a = models.OneToOneField(related_name='ref_b', null=True)
Run Code Online (Sandbox Code Playgroud)

首先看我指出问题的代码:

a1 = A.objects.create()
a2 = A.objects.create()
b1 = B.objects.create()
b2 = B.objects.create(ref_a=a2)

# then I call:
print(a1.ref_b)  # DoesNotExist Exception raised
print(a2.ref_b)  # returns b2
print(b1.ref_a)  # returns None
print(b2.ref_a)  # returns a2
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果我想检查一个A对象,判断它是否存在B引用它的对象.我能怎么做?

我尝试的有效方法只是尝试捕获异常,但还有其他更漂亮的方法吗?


我的努力:

1 - 以下代码有效,但太难看了!

b = None
try:
    b = a.ref_b
except:
    pass
Run Code Online (Sandbox Code Playgroud)

2 - 我也尝试检查a中的属性,但不工作:

b = a.ref_b if hasattr(a, 'ref_b') else None
Run Code Online (Sandbox Code Playgroud)

朋友们,你遇到同样的问题吗?请指点我,谢谢!

python django model one-to-one

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

(1 + N)选择OnetoOne关联

考虑以下型号:

@Entity
public class User {

    @Id
    @Column(name = "USER_ID")
    private Long userId;

    @Column(name = "FIRST_NAME")
    private String firstName;

    @Column(name = "LAST_NAME")
    private String lastName;

    @OneToOne
    @PrimaryKeyJoinColumn
    private UserExt userExt;
...     //getters and setters

}

@Entity
public class UserExt {

    @Id
    @Column(name="USER_ID")
    private Long id;

    private String cdpId;

    private Date lastChanged;
...     //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

执行时:

Query query = session.createQuery("from User");
List<User> list = query.list();
Run Code Online (Sandbox Code Playgroud)

Hibernate执行

Hibernate: select user0_.USER_ID as USER1_0_, user0_.FIRST_NAME as FIRST2_0_, user0_.LAST_NAME as LAST3_0_, user0_.EXT_USERNAME as …
Run Code Online (Sandbox Code Playgroud)

java performance orm hibernate one-to-one

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

用于mappedBy对象的Hibernate缓存

我的代码如下:

@Entity
@Table(name = "A")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class A
{
  @OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER, mappedBy="a")
  public B getB() {};
}

@Entity
@Table(name = "B")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class B
{
  @OneToOne(cascade={}, fetch=FetchType.LAZY)
  @JoinColumn(name="A_ID")
  public A getA() {};
}
Run Code Online (Sandbox Code Playgroud)

每次A加载时都有查询B.为什么加载A.getB()后没有缓存,A是否可以缓存它?

java caching hibernate jpa one-to-one

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

在各种类型的对象之间存储许多关系1:1:去耦和高性能

我有300多个班级.它们在某些方面有关系.

为简单起见,所有关系均为1:1.
这是一个示例图.

在此输入图像描述 (在实际情况中,大约有50个关系对.)

注意:对于某些情况,某些关系可能不存在.
例如,某些hen与任何内容无关food.

注2:没有链接=从不,例如每个egg都与任何相关cage.
永远不会添加/删除/查询这种关系.

题:

如何优雅地存储它们之间的关系?
我的所有4个想法(下面)似乎都有缺点.

是一个相关的问题,但是1:N只有1个关系.

我糟糕的解决方案

这些是半伪代码.

版本1直接

我的第一个想法是互相添加指针.

Chick.h: -

class Egg;
class Food;
class Chick{  Egg* egg; Food* food;}
Run Code Online (Sandbox Code Playgroud)

Hen.h: -

class Egg; class Cage; class Food;
class Hen{ Egg* egg; Cage* cage; Food* food;}
Run Code Online (Sandbox Code Playgroud)

添加/删除关系和查询非常便宜,例如: -

int main(){
    Hen* hen;    ...    Egg* egg=hen->egg;
}
Run Code Online (Sandbox Code Playgroud)

它运作良好,但随着我的程序的增长,我想要将它们分离.
粗略地说,Hen.h不应该包含单词Egg,反之亦然.

有很多想法,但似乎都没有.
我将展示每个解决方案的简短片段,然后总结问题末尾的利弊.

版本2哈希映射

使用std::unordered_map.
它成为我程序的瓶颈.(在发布模式下配置)

class Egg{}; …
Run Code Online (Sandbox Code Playgroud)

c++ database one-to-one relationship c++14

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