标签: one-to-one

@OneToOne单向和双向

我有两个例子,第一个是@OneToOne单向映射和第二个双向映射.在单向映射中,拥有方表必须包含引用另一个表的id的连接列; 然后在双向中它们都必须包含彼此的外键列.但是在使用自动生成策略生成数据库模式之后,两个示例对数据库模式具有相同的效果.单向映射是正常的,但双向示例只包含一个外键列,但它必须涉及彼此的外键!

单向映射

@Entity
public class Customer43 {

@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
private String email;
private String phoneNumber;
@OneToOne
@JoinColumn(name = "address_fk")
private Address43 address;

// Getters, Setters and Constructors.
}

@Entity
public class Address43 {

@Id
@GeneratedValue
private Long id;
private String street1;
private String street2;
private String city;
private String state;
private String zipcode;
private String country;

// Getters, Setters and Constructors.
}
Run Code Online (Sandbox Code Playgroud)

双向映射

@Entity
public class Customer44 {

@Id
@GeneratedValue …
Run Code Online (Sandbox Code Playgroud)

jpa one-to-one bidirectional-relation

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

Django Admin:如何用oneToOne关系中的两个模型显示list_display的字段值?

我相信我的问题的答案很简单,但我无法在任何地方找到它.这是我的困境.我有两个模型:Member和MemberDetail,它们是oneToOne关系,如下所示:

class Member(models.Model):
   ID = models.AutoField(primary_key=True)
   FIRST_NAME = models.CharField('First name', max_length=50)
   LAST_NAME = models.CharField('Last name', max_length=50)
   def __unicode__(self):  
      return u'%s %s' % (self.FIRST_NAME, self.LAST_NAME)

class MemberDetail(models.Model):
   member = models.OneToOneField(Member, primary_key=True)
   DATE_OF_BIRTH = models.DateField('Date of birth')
   EMAIL = models.EmailField('E-mail')
   PHONE = models.CharField('Phone', max_length=15)
Run Code Online (Sandbox Code Playgroud)

现在在我的admin.py中,我想要显示包含所有数据的成员表,如下所示:

class MemberDetailInline(admin.TabularInline):
    model = MemberDetail

class MemberAdmin(admin.ModelAdmin):
    list_display = ("FIRST_NAME", "LAST_NAME", "date_of_birth", "email", "phone")
    inlines = [
        MemberDetailInline,
    ]

admin.site.register(Member, MemberAdmin)
Run Code Online (Sandbox Code Playgroud)

我根本不知道怎么写list_display的"date_of_birth","email"和"phone"部分.我能做的最接近的事情是在内联后添加:

def date_of_birth(self, MemberDetail):
    return MemberDetail.DATE_OF_BIRTH
def date_of_birth(self, MemberDetail):
    return MemberDetail.EMAIL
def date_of_birth(self, MemberDetail):
    return MemberDetail.PHONE …
Run Code Online (Sandbox Code Playgroud)

django admin one-to-one models

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

Golang Gorm与has-one一对多

我正在尝试通过构建一个小型原型订单管理应用来学习Go和Gorm.数据库是MySQL.通过简单的查询,Gorm一直很出色.然而,当试图获得涉及一对多与一对一关系的组合的结果集时,Gorm似乎不足.毫无疑问,我缺乏理解实际上是在做空.我似乎无法找到任何我想要完成的在线示例.任何帮助将不胜感激.

去结构

// Order
type Order struct {
    gorm.Model
    Status  string
    OrderItems   []OrderItem
}

// Order line item
type OrderItem struct {
    gorm.Model
    OrderID uint
    ItemID  uint
    Item    Item
    Quantity int
}

// Product
type Item struct {
    gorm.Model
    ItemName     string
    Amount       float32
}
Run Code Online (Sandbox Code Playgroud)

数据库表

orders
id | status
 1 | pending

order_items
id | order_id | item_id | quantity
 1 | 1        | 1       | 1
 2 | 1        | 2       | 4

items
id | item_name   | amount …
Run Code Online (Sandbox Code Playgroud)

one-to-one one-to-many go go-gorm

10
推荐指数
1
解决办法
7393
查看次数

为什么hibernate执行两个查询以急切加载@OneToOne双向关联?

我有实体A有一个B实体,而B有一个带有@OneToOne双向关联的A.

现在,当我找到所有A记录时,hibernate在B上执行左外连接的两个查询,如下所示:

select a.id, a.id_b, a.field1, b.id, b.field1 from A as a, B as b left outer join b ON b.id=a.id_b;
select a.id, a.id_b, a.field1, b.id, b.field1 from A as a, B as b left outer join b ON b.id=a.id_b WHERE b.id=?
Run Code Online (Sandbox Code Playgroud)

首先查询加载A和B字段,这没关系,但为什么要执行第二次查询来重新加载A?我认为这个查询加载了B中的A内容,但是这个A显然是包含B的A ......所以它已经加载了第一个查询,是不是真的?

- 编辑 -

实体A:

@Entity
public class A implements Serializable{
    // id and other ecc ecc
    @OneToOne
    @JoinColumn(name="id_b")
    B b;
}
Run Code Online (Sandbox Code Playgroud)

实体B:

@Entity
public class B implements Serializable{
    // id and other ecc ecc
    @OneToOne(mappedBy="b")
    A …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa one-to-one bidirectional-relation

9
推荐指数
1
解决办法
6181
查看次数

Hibernate - 双向@OneToOne

我有2个类:User和UserPicture,它们之间有1:1的关系.

public class User {
     @Id
     @GeneratedValue(strategy=GenerationType.AUTO)
     @Column(name="id", nullable = false, unique = true)
 private int id;

     private String firstname;

     private String lastname;

     @OneToOne
     @JoinColumn(name = "picture") //field named "picture" in the database
     private UserPicture userPicture;

     ..
}


public class UserPicture {

     @Id
     @GeneratedValue(strategy=GenerationType.AUTO)
     @Column(name="id", nullable = false, unique = true)
     private int id;

     private Blob image;

     @OneToOne
     @JoinColumn(name = "user")
     User user;
Run Code Online (Sandbox Code Playgroud)

UserPicture中的'user'将被加载,但User中的'userPicture'不会 - 我错了什么?

编辑 必须添加我只是创建一个UserPicture并插入它们(使用现有的userId) - 也许我需要在UserPicture级联'用户'?

hibernate one-to-one

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

OneToOne + No Foreginkey + Unidirectional + Datamissing => EntityNotFoundException

在遗留系统中,我们有1个表(实体)和1个视图(UserDetail),没有约束但有关系.

Entity
| Id | Desc | Created_By |...

UserDetail
| UserId | F_Name | L_Name |...
Run Code Online (Sandbox Code Playgroud)

CreatedBy具有创建该实体的用户的用户标识.我们在Entity.java中有一个单向映射,如下所示.

@OneToOne
@JoinColumn(name = "CREATED_BY", referencedColumnName = "USER_ID")
private UserDetail createdBy;
Run Code Online (Sandbox Code Playgroud)

问题

但由于它是一个遗留系统,我们无法控制它并且用户被硬删除.

调用entityReposity.findAll时,将引发以下错误

org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find com...UserDetail with id 92237; nested exception is javax.persistence.EntityNotFoundException: Unable to find com...UserDetail with id 92237
Run Code Online (Sandbox Code Playgroud)

如何让JPA认为这种关联是可选的,或者在JPA中有什么方法可以忽略它(比如Hibernate中的@NotFound)?

试着

  1. @NotFound有效,但我们需要将@OneToOne破解为@ManyToOne.我们还想要一个独立于实现的解决方 注意到这个错误,https://hibernate.atlassian.net/browse/ANN-725

  2. optional = true - 如果这可以按照它应该如何表现的语法含义工作,我就不会写这个.

  3. 还尝试了UserDetails.java中的postLoad().

  4. @PostLoad解决方案我们有一个异常的异常处理程序,并且在调用Entity类中的@PostLoad之前会捕获异常.

在Entity.java中

    @PostLoad
    public void postLoad(){
        try {
            System.out.println(this.getCreatedBy()); //Before control comes here, it goes to aop …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa one-to-one oracle11g

9
推荐指数
1
解决办法
2869
查看次数

如何使用@JsonManagedReference和@JsonBackReference映射POJO之间的OneToOne关系

我读过了

寻找解决方案来映射一对一的关系.但是,这些文章中的演示都是多对一或一对多.从演示中,我得出结论,在大多数情况下,我们将ONE侧注释为@JsonManagedReference,将MANY侧注释为@JsonBackReference.

但是,没有关于如何映射一对一的提示.你有什么主意吗?

而且,如果它是双向的一对一怎么办?

json one-to-one jackson

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

在O(1)中使用getKey(B)的一对一映射数据结构(A,B)?

这个问题最初是错误的,请参阅下面的编辑.我会把它留给上下文.

我一直在考虑建立双向(即一对一)映射的智能方法.映射函数A-> B(多对一)基本上是HashMap(A,B)的作用.如果我现在想要一个与O(1)中的contains()实现一对一的数据结构,那么我可以使用java标准库中的某些东西吗?请注意,我现在不需要这个,这只是我最近想到的,无法提供数据结构,所以答案并不急.有类似的课吗?如果没有,您认为为什么会这样?

我所能找到的就是关于冬眠的事情,这对我没有任何帮助.

编辑:我的问题是措辞不好,所以一些解释是应该的.

我的意思是"向后"映射B-> A. HashMap(A,B)在O(1)中包含(A)和包含(B),所以这甚至不是我的意思,对于混淆感到抱歉.我的意思是,是否有一个数据结构映射A < - > B在O(1)中有getValue(A)和getKey(B)?

我意识到这可以通过维护包含相同关系的两个HashMaps(A,B)和(B,A)来完成,但我觉得应该有一个数据结构来处理它而不必"手动"执行.

java contains one-to-one

8
推荐指数
2
解决办法
8940
查看次数

创建PostgreSQL表+关系 - 问题与关系 - 一对一

所以我应该完全按照ERD描述它的方式创建这个模式+关系.这里我只显示我遇到问题的表格:

我应该有一对一,但我得到一个很多

所以我想尝试一对一,但出于某种原因,无论我改变什么,我都会在有外键的任何表上获得一对多.

这是我对这两个表的sql.

        CREATE TABLE lab4.factory(

            factory_id      INTEGER         UNIQUE,
            address         VARCHAR(100)    NOT NULL,
            PRIMARY KEY ( factory_id )

        );

        CREATE TABLE lab4.employee(

            employee_id     INTEGER         UNIQUE,
            employee_name   VARCHAR(100)    NOT NULL,
            factory_id      INTEGER         REFERENCES      lab4.factory(factory_id),
            PRIMARY KEY ( employee_id )

        );
Run Code Online (Sandbox Code Playgroud)

在这里,我得到同样的东西.我不是一对一的关系,而是一对一的关系.Invoiceline是一个弱势实体.

它需要是一对一的

这是我的第二张图片的代码.

        CREATE TABLE lab4.product(

            product_id      INTEGER     PRIMARY KEY,
            product_name    INTEGER     NOT NULL

        );


        CREATE TABLE lab4.invoiceLine(

            line_number     INTEGER     NOT NULL,
            quantity        INTEGER     NOT NULL,
            curr_price      INTEGER     NOT NULL,
            inv_no          INTEGER     REFERENCES      invoice,
            product_id      INTEGER     REFERENCES      lab4.product(product_id),
            PRIMARY KEY ( inv_no, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql one-to-one one-to-many database-schema

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

如何在Django中获取`OneToOneField()`的关联数据?

我工作于Django 2.0

我有一个Note用于保存笔记的模型,还有另外两个模型用于向笔记添加颜色标签。

class Note(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=250, blank=True, default='Untitled')
    content = models.TextField(blank=True)

class ColorLabels(models.Model):
    title = models.CharField(max_length=100, unique=True)
    value = models.CharField(max_length=100)
    default = models.BooleanField(default=False)

class NoteLabel(models.Model):
    note = models.OneToOneField(Note, on_delete=models.CASCADE)
    color_label = models.OneToOneField(ColorLabels, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

与对象Note

note = Note.objects.get(pk=1)
Run Code Online (Sandbox Code Playgroud)

我想访问关联的ColorLabelstitle字段valueNoteLabel对象。

因为它们是一对一的字段。我尝试做

note.note_label
note.NoteLabel
note.note_label_set
Run Code Online (Sandbox Code Playgroud)

但所有返回错误为

AttributeError: 'Note' object has no attribute 'note_label_set'
Run Code Online (Sandbox Code Playgroud)

python django django-models one-to-one associated-object

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