Java Hibernate JPA具有共享主键的一对一双向映射外键字段为空(hb可以';t自动设置)
所以我在最后一天尝试了一些单向的一对一映射,在一些测试之后,我决定尝试另一种方法。当我试图坚持我的实体时,偶然发现了一个问题。我找不到一种方法来强制hibernate同时用引用来填充我的外键字段。它只将它们设置为一种方式,而不是另一种方式:Java Hibernate JPA具有共享主键的一对一双向映射外键字段为空(hb可以';t自动设置),java,hibernate,jpa,orm,bidirectional,Java,Hibernate,Jpa,Orm,Bidirectional,所以我在最后一天尝试了一些单向的一对一映射,在一些测试之后,我决定尝试另一种方法。当我试图坚持我的实体时,偶然发现了一个问题。我找不到一种方法来强制hibernate同时用引用来填充我的外键字段。它只将它们设置为一种方式,而不是另一种方式: Item--->ItemInfo(我在构造函数中手动填充信息字段) 项目 主题外,但您的类具有相同的名称 请尝试上面的代码 主题外,但您的类具有相同的名称 请尝试上面的代码………..您好,您是否尝试使用cascade.persistent在oneToOne注
Item--->ItemInfo(我在构造函数中手动填充信息字段)
项目
主题外,但您的类具有相同的名称
请尝试上面的代码
主题外,但您的类具有相同的名称
请尝试上面的代码………..您好,您是否尝试使用cascade.persistent在oneToOne注释中?@Ruokki我使用的是CascadeType.ALL
,据我所知,其中包括persistent。我试过以防万一-不走运=(试着在你的项目中使用@Generated info infohello你试过使用cascade.persist在oneToOne注释中吗?@Ruokki我正在使用cascade类型。所有的都包括persist在里面。我试过以防万一-不走运=(试着在你的ItemInfoWell中使用@Generated info,它可以工作,但我试图让hibernate为我自动分配字段(就像你的setter变体一样)。好吧,它可以工作,但我试图让hibernate为我自动分配字段(就像你的setter变体一样)
@Entity
@Table(name = "t_item")
class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(mappedBy = "item", cascade = CascadeType.ALL,
fetch = FetchType.LAZY, orphanRemoval = true, optional = false)
private ItemInfo info;
private String name;
}
@Entity
@Table(name = "t_item_info")
class ItemInfo {
@Id
private Long itemId;
@MapsId
@OneToOne
@JoinColumn(name = "item_id", referencedColumnName = "id")
private Item item;
private String descr;
}
Item item = new Item(
null,
new ItemInfo(null, "Somde description"),
"Some name"
);
itemRepo.save(item);
@Entity
@Table(name = "t_item")
class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(mappedBy = "item", cascade = CascadeType.ALL,
fetch = FetchType.LAZY, orphanRemoval = true, optional=false)
private ItemInfo info;
@Column(name="name)
private String name;
// Getters and setters omitted for brevity
private void setItemInfo(ItemInfo info) {
if (info == null) {
if (this.info != null) {
this.info.setInfo(null);
}
} else {
info.setInfo(this);
}
this.info = info;
}
@Entity
@Table(name = "t_item_info")
class ItemInfo {
@Id
private Long itemId;
@OneToOne
@MapsId
@JoinColumn(name="item_id)
private Item item;
@Column(name="description")
private String description;
// Getters and setters omitted for brevity
}