Java Hibernate JPA具有共享主键的一对一双向映射外键字段为空(hb可以';t自动设置)

Java Hibernate JPA具有共享主键的一对一双向映射外键字段为空(hb可以';t自动设置),java,hibernate,jpa,orm,bidirectional,Java,Hibernate,Jpa,Orm,Bidirectional,所以我在最后一天尝试了一些单向的一对一映射,在一些测试之后,我决定尝试另一种方法。当我试图坚持我的实体时,偶然发现了一个问题。我找不到一种方法来强制hibernate同时用引用来填充我的外键字段。它只将它们设置为一种方式,而不是另一种方式: Item--->ItemInfo(我在构造函数中手动填充信息字段) 项目 主题外,但您的类具有相同的名称 请尝试上面的代码 主题外,但您的类具有相同的名称 请尝试上面的代码………..您好,您是否尝试使用cascade.persistent在oneToOne注

所以我在最后一天尝试了一些单向的一对一映射,在一些测试之后,我决定尝试另一种方法。当我试图坚持我的实体时,偶然发现了一个问题。我找不到一种方法来强制hibernate同时用引用来填充我的外键字段。它只将它们设置为一种方式,而不是另一种方式:

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

}