标签: one-to-one

如何使用Entity Framework 4 Code First(POCO)声明一对一关系

如何使用Entity Framework 4 Code First(POCO)声明一对一的关系?

我发现了这个问题(实体框架4中的一对一关系),但是答案引用的文章没有用(有一行代码是1-1关系,但没有提到如何定义它).

c# entity-framework one-to-one poco ef-code-first

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

JPA/Hibernate使用共享主键进行单向一对一映射

我正在努力获得与JPA(提供者:Hibernate)一起使用的单向一对一关系.在我看来,这不应该是一个麻烦,但显然JPA/Hibernate不同意这一点;-)

问题是我必须映射一个我无法更改的遗留模式,并且此模式在两个实体之间使用共享主键,同时它是一个实体的外键.

我创建了一个简单的TestCase:

DB如下所示:

CREATE TABLE PARENT (PARENT_ID Number primary key, Message varchar2(50));

CREATE TABLE CHILD (CHILD_ID Number primary key, Message varchar2(50),
CONSTRAINT FK_PARENT_ID FOREIGN KEY (CHILD_ID )REFERENCES PARENT (PARENT_ID));

CREATE SEQUENCE SEQ_PK_PARENT START WITH 1 INCREMENT BY 1 ORDER;
Run Code Online (Sandbox Code Playgroud)

父母(=一对一的拥有方)看起来如下:

@Entity
@Table(name = "PARENT")
public class Parent implements java.io.Serializable {       
    private Long parentId;
    private String message;
    private Child child;

    @Id
    @Column(name = "PARENT_ID", unique = true, nullable = false, precision = 22, scale = 0)
    @SequenceGenerator(name="pk_sequence", sequenceName="SEQ_PK_PARENT")
    @GeneratedValue(generator="pk_sequence", strategy=GenerationType.SEQUENCE) …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa one-to-one java-ee

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

Django OneToOneField - 我应该把它放在哪个模型中?

我们假设我们有以下模型.

class A(Model): pass
class B(Model): pass
Run Code Online (Sandbox Code Playgroud)

然后没有区别:

在模型A中: b = OneToOneField(B, related_name=A.__name__)

在模型B中: a = OneToOneField(A, related_name=B.__name__)

那么我应该问自己什么问题来决定是否将OTO放在一个或另一个模型中.我的意思是像has-a,is-a等等.

django one-to-one

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

NHibernate一对一映射,其中第二个表数据可以为null

我有一个现有的数据库,里面有表Transactions.我添加了一个名为TransactionSequence的新表,其中每个事务最终只有一个记录.我们使用序列表来计算给定帐户的交易.我已将其映射为一对一映射,其中TransactionSequence具有TransactionId的主键.

约束是事务表上有一个而不是触发器,不允许更新已取消或已发布的事务.

因此,当计算序列并保存事务时,NHibernate会尝试发送事务更新,如'UPDATE Transaction SET TransactionId =?WHERE TransactionId =?'.但由于触发因此失败.如何配置我的映射,以便在插入新的TransactionSequence表时NHibernate不会尝试更新Transaction表?

交易映射:

<class name="Transaction" table="Transaction" dynamic-update="true" select-before-update="true">
    <id name="Id" column="ID">
        <generator class="native" />
    </id>

    <property name="TransactionTypeId" access="field.camelcase-underscore" />
    <property name="TransactionStatusId" column="DebitDebitStatus" access="field.camelcase-underscore" />

    <one-to-one name="Sequence" class="TransactionSequence" fetch="join"
                 lazy="false" constrained="false">      
    </one-to-one>
</class>
Run Code Online (Sandbox Code Playgroud)

和序列映射:

<class name="TransactionSequence" table="TransactionSequence" dynamic-update="true">
    <id name="TransactionId" column="TransactionID" type="Int32">
        <generator class="foreign">
            <param name="property">Transaction</param>
        </generator>
    </id>

    <version name="Version" column="Version" unsaved-value="-1" access="field.camelcase-underscore" />

    <property name="SequenceNumber" not-null="true" />

    <one-to-one name="Transaction" 
                class="Transaction" 
                constrained="true" 
                foreign-key="fk_Transaction_Sequence" />

</class>
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激...

nhibernate one-to-one

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

当映射到具有子类的抽象@Entity时,JPA @OneToOne抛出Error

当一个Entity映射到另一个在其子类上有直接实现的Entity时,我遇到了问题.请参阅以下示例映射:

@Entity
class Location {
      @OneToOne
      @JoinColumn(...)
      private Person person;
}

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="person_type",discriminatorType=DiscriminatorType.STRING)
abstract class Person {
}

@Entity
@DiscriminatorValue("M")
class Man extends Person {
    ...
}

@Entity
@DiscriminatorValue("W")
class Woman extends Person {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,这就是我在数据库表上的内容:

location-table:id = 1,person_id = 1 person-table:id = 1,person_type ="M"

当我使用实体管理器检索位置时,hibernate会抛出一个异常,说我无法实例化抽象类或接口.

Location location = entityManager.find(Location.class, 1L);
Run Code Online (Sandbox Code Playgroud)

Hibernate抛出此错误:

javax.persistence.PersistenceException: org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: Person
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:195)
at ......
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59) …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa one-to-one entitymanager

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

Hibernate OneToOne映射实体将所有属性设置为null

使用Hibernate 5,Spring 4

请考虑以下代码和两个实体之间的映射:

用户类

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
private TruckOwner truckOwner;
Run Code Online (Sandbox Code Playgroud)

//下面的getter setters

TruckOwner类

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
Run Code Online (Sandbox Code Playgroud)

//下面的getter setter

当我的代码尝试更新user类中的值时,如下面的代码: UserServiceImpl类

@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void resetPassword(Long userId,String newPassword) {

    User user = userDAO.findById(userId);

    user.setPassword(newPassword);
    System.out.println(user.getTruckOwner().getTruckOwnerId());     
    userDAO.merge(user);
}
Run Code Online (Sandbox Code Playgroud)

在调用时userDAO.merge(user);我得到以下错误: 非瞬态实体具有空id:com.mymodel.TruckOwner

我在项目的许多地方遇到这种问题,请帮我解决这个问题,为什么TruckOwner类的所有内容都由hibernate设置?

java mapping spring hibernate one-to-one

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

@OneToOne和@JoinColumn,自动删除null实体,可行吗?

我有两个实体,具有以下JPA注释:

@Entity
@Table(name = "Owner")
public class Owner implements Serializable
{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private long id;

  @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
  @JoinColumn(name="Data_id")
  private Data Data;  
}

@Entity
@Table(name = "Data")
public class Data implements Serializable
{
  @Id
  private long id;
}
Run Code Online (Sandbox Code Playgroud)

所有者和数据具有一对一的映射,拥有者是所有者.执行时发生问题:owner.setData(null); ownerDao.update(所有者) ; "Owner"表的Data_id变为null,这是正确的.

但"数据"行不会自动删除.我必须编写另一个DataDao,并用另一个服务层来包装这两个动作(ownerDao.update(owner); dataDao.delete(data);)

当拥有的所有者将其设置为null时,是否可以自动删除数据行?

orm hibernate jpa one-to-one

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

@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
查看次数