Java @OneTONE不保存子信息
这是我的问题。 我有两类定义如下:Java @OneTONE不保存子信息,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,这是我的问题。 我有两类定义如下: @Entity @Table(name = "CAR") public class Car{ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "CAR_ID", nullable = false) private Long idCar; @NotFound(action = NotFoundA
@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”字段没有默认值
似乎它试图保存在品牌数据库中,但我只需要在Car对象中保存BRAND列
另一方面,如果我买了一辆车,保留了一个品牌,我会正确地恢复它
编辑:
我试图用JPA存储库保存一个car对象。这辆车装满了一个品牌对象,只有一个品牌ID
Car myCar = new Car();
Brand myBrand = new Brand();
myBrand.setIdBrand(11l);
myCar.setIdBrand(myBrand);
repository.save(myCar);
提前感谢。您需要将数据库中的“BRAND_ID”列设置为空,显然该列当前为“not null”
不确定该表是否使用hibernate生成。主密钥不能为空。此外,OP询问如何不在表
brand
中保存品牌,而只在表CAR
中保存品牌(这对我来说有点不清楚)。感谢您的回答,这些表不是由Hibernate生成的。品牌标识列是品牌表中的主键。我把它设为NULL,默认值为NULL,但它仍然给我同样的错误。主键不能为NULL,但外键可以为nulable。Hi@Seelenvirtuose,问题是我有一个装满了很多品牌的表,它是汽车的可选值,我不需要在Brands中插入更多值。您是否尝试了OneToOne.optional
属性?是的,我尝试了此组合,但也没有成功:@ManyToOne(targetEntity=PageInfo.class,fetch=FetchType.LAZY,cascade=CascadeType.DETACH,optional=true)“我有一个表格,里面有很多品牌,这是汽车的可选值,我不需要在品牌中插入更多的值”。然后加载一个品牌,将其与汽车关联,然后保存汽车。您的问题没有显示代码,您试图保存任何数据。我尝试的是使用JPA存储库保存汽车对象。存储库。保存(myCar),wich将有一个品牌对象,填充idBrand。Hi@ThomasTimbul,可选属性有效!我之前写错了,很抱歉,谢谢你的评论!