【问题标题】:@OneToOne without saving child information@OneToOne 不保存子信息
【发布时间】:2018-08-07 11:38:16
【问题描述】:

这是我的问题。 我有两个这样定义的类:

@Entity
@Table(name = "CAR")
public class Car{

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "CAR_ID", nullable = false)
        private Long idCar;

        @NotFound(action = NotFoundAction.IGNORE)
        @JoinColumn(name="BRAND")
        @OneToOne(targetEntity = Brand.class, fetch = FetchType.LAZY, cascade=CascadeType.DETACH)
        private Brand idBrand;
}

@Entity
@Table(name = "BRAND")
public class Brand{

       @Id
       @Column(name = "BRAND_ID")
       private Long idBrand;

       @Column(name = "DESCRIPTION")
       private String description;

}

我需要在不保存品牌信息的情况下保存汽车。如果我现在尝试保存,我有一个数据库错误:字段 'BRAND_ID' 没有默认值 它似乎试图保存在 BRAND 数据库中,但我只需要将列 BRAND 保存在 Car 对象中。

另一方面,如果我得到了一辆汽车,并保存了一个品牌,我可以正确地恢复它。

编辑: 我正在尝试使用 JPA 存储库保存汽车对象。这辆汽车充满了一个品牌对象,它只有一个品牌 ID。

Car myCar = new Car();
Brand myBrand = new Brand();
myBrand.setIdBrand(11l);
myCar.setIdBrand(myBrand);
repository.save(myCar);

提前致谢。

【问题讨论】:

  • 你试过OneToOne.optional属性吗?
  • 是的,我尝试了这种组合,但也没有用:@ManyToOne(targetEntity = PageInfo.class, fetch = FetchType.LAZY, cascade=CascadeType.DETACH, optional=true)跨度>
  • “我有一张表,里面有很多品牌,它是 Car 的可选值,我不需要在 BRANDS 中插入更多值”。然后加载一个品牌,将其与汽车相关联,然后保存汽车。您的问题没有显示代码,您尝试在其中保存任何数据。
  • 我试图用 JPA 存储库保存一个 Car 对象。 repository.save(myCar),其中将有一个 Brand 对象,其中填充了 idBrand。
  • 嗨@ThomasTimbul,可选属性有效!我之前写错了,对此感到抱歉,感谢您的评论!

标签: java spring hibernate spring-data-jpa


【解决方案1】:

您需要使数据库中的“BRAND_ID”列可以为空,显然该列当前是“非空”。

不确定该表是否是使用休眠生成的。

【讨论】:

  • 主键不能可为空。此外,OP 询问如何不在表BRAND 中保存品牌,而只在表CAR 中保存品牌(我有点不清楚)。
  • 感谢您的回答,表格不是由 hiberante 生成的。 BRAND_ID 列是 BRAND 表中的 PRIMARY KEY。我把它设为空,默认值为 NULL,但它仍然给我同样的错误。
  • 主键不能为空,但外键可以为空。
  • 嗨@Seelenvirtuose,问题是我有一张表,里面有很多品牌,它是汽车的可选值,我不需要在品牌中插入更多值
猜你喜欢
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 2020-08-17
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
相关资源
最近更新 更多