【问题标题】:Hibernate One to One id is null, why?Hibernate 一对一 id 为空,为什么?
【发布时间】:2016-05-19 14:05:18
【问题描述】:

我的代码:

financialTransactionEntity.getFinancialTransaction_5000().setFinancialTransactionEntity(financialTransactionEntity);

还有我的课程:

@Entity
@Table(name = "master_card_daily_financial_transaction_entity")
public class FinancialTransactionEntity {

    private Long id;

    private FinancialTransaction_5000 financialTransaction_5000;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToOne(mappedBy = "financialTransactionEntity",
            targetEntity = FinancialTransaction_5000.class,
            cascade = javax.persistence.CascadeType.ALL)
    @Cascade({org.hibernate.annotations.CascadeType.ALL})
    public FinancialTransaction_5000 getFinancialTransaction_5000() {
        return financialTransaction_5000;
    }

    public void setFinancialTransaction_5000(FinancialTransaction_5000 financialTransaction_5000) {
        this.financialTransaction_5000 = financialTransaction_5000;
    }
}

--

@Entity
@Table(name = "master_card_daily_financial_transaction_5000")
public class FinancialTransaction_5000 {

    private Long id;
    private FinancialTransactionEntity financialTransactionEntity;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToOne(targetEntity = FinancialTransactionEntity.class,
            cascade = javax.persistence.CascadeType.ALL)
    @Cascade({org.hibernate.annotations.CascadeType.ALL})
    public FinancialTransactionEntity getFinancialTransactionEntity() {
        return financialTransactionEntity;
    }

    public void setFinancialTransactionEntity(FinancialTransactionEntity financialTransactionEntity) {
        this.financialTransactionEntity = financialTransactionEntity;
    }
}

但是我会在数据库中得到如下:

table: master_card_daily_financial_transaction_entity
+-----+------------------------------+
| id  | financialTransaction_5000_id |
+-----+------------------------------+
|   1 |                         NULL |

table: master_card_daily_financial_transaction_5000
+-----+-------------------------------+
| id  | financialTransactionEntity_id |
+-----+-------------------------------+
|   1 |                          1    |

如何确保我的 FinancialTransaction_5000_id 也是 1

【问题讨论】:

  • 这是一个现有的架构吗?你真的想要两个表中的 FK 吗?
  • This might help。为什么要在双方都存储密钥关系似乎很不寻常,这是有原因的吗?
  • 你需要提到@JoinColumn
  • @shankarsh15 :@JoinColumn 是可选的

标签: hibernate jpa identifier one-to-one


【解决方案1】:

来自@OneToOne.mappedBy()javadoc:

拥有关系的字段。此元素仅在关联的反向(非拥有)侧指定。

您只需要在“非拥有”实体上指定,所以我猜您要么坚持关联的错误一边,或者将mappedBy 放在错误的一边。

【讨论】:

    【解决方案2】:

    删除@OneToOne 中的 mappedBy 参数

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多