当前位置: 首页 > 知识库问答 >
问题:

Hibernate多对一外键不工作

狄承望
2023-03-14

下面是一对多关系的Hibernate示例

cart java class
@Entity
@Table(name="cart")
public class Solocart {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="carts_id")
    int id;
    @Column(name="cust_name")

    String name;
    @OneToMany(mappedBy="cartitem")
    Set<Soloitems>soloitem;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Set<Soloitems> getSoloitem() {
        return soloitem;
    }
    public void setSoloitem(Set<Soloitems> soloitem) {
        this.soloitem = soloitem;
    }




}

下一个项目java文件

@Entity
@Table(name="cartitem")
public class Soloitems {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="cart_id")
    private int id;
    @Column(name="no_item")
    private int number;
    @ManyToOne
    @JoinColumn(name="carts_id")
    private Solocart cartitem;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public Solocart getCartitem() {
        return cartitem;
    }
    public void setCartitem(Solocart cartitem) {
        this.cartitem = cartitem;
    }

iml代码

Session sn=Util.getSessionFactory().openSession();
    sn.beginTransaction();
    Solocart crt=new Solocart();
    crt.setName("solomon");
    Soloitems itm1=new Soloitems();
    Soloitems itm2=new Soloitems();
    itm1.setNumber(5);
    itm2.setNumber(8);
    Set<Soloitems>values= new HashSet<Soloitems>();
    values.add(itm1);
    values.add(itm2);
    crt.setSoloitem(values);
    sn.save(crt);
    sn.save(itm2);
    sn.save(itm1);
    sn.getTransaction().commit();
    sn.close();
    System.out.println("sucessfully created");

在这里,一辆车应该有很多项目,同时运行两个tanles都更新了,但是

# cart_id, no_item, carts_id
     '1', '   8',     NULL
      '2', '  5',     NULL

第二张桌子

# carts_id, cust_name
    '1', '   solomon'

正如您所看到的,这两个表都已更新,但本例中的foreignkey carts\u id没有在owner类中更新,我使用了joincolumn

共有2个答案

太叔富
2023-03-14

您没有在任何地方将Solocart设置为您的SoloItems。尝试将其添加到您的代码中

itm1.setCartitem(crt);
itm2.setCartitem(crt);
李昱
2023-03-14

实体与Soloitems之间存在双向关系,因此在代码中需要从实体的两侧维护关系。

因此,基于此,在代码中,您只是将Soloitems设置为Solocart,但没有将Solocart设置为Soloitems,正如Predrag所述,添加以下几行代码来维护关系:

itm1.setCartitem(crt);
itm2.setCartitem(crt);
 类似资料:
  • 问题内容: 我正在尝试使我的@OneToMany和@ManyToOne关系正确。 第1类: 第2类: 当我加载或保存新记录时,这种关系似乎运行良好: 但是,当我尝试更新该记录时,它将尝试将IdeaProfileId设置为null: 当我调试时,我可以看到IdeaProfileId确实在音高对象上设置了… 仅供参考,我不是直接更新从数据库加载的原始对象。这些域映射到UI更新的Model类。因此,在保

  • 问题内容: 我有两个非常简单的对象,并且一个对象应在一组“一对多”关系中包含另一个对象。对象已正确插入数据库中,但“子项”表中的外键始终为“ null”。 我不知道为什么: 这是测试对象,它将子对象保持在其集合中: 这是子对象,它包含指向“ TestObj”的反向链接: 我使用以下代码来持久化此对象: 有人可以解释一下为什么会这样吗? 问题答案: 这很简单:您永远不会初始化中的字段(应将其命名为C

  • 我可以这样做吗?或者有没有其他更好的方法来处理这种情况

  • 我很难按照我的预期建立实体来工作。 我的实体目前看起来像: 因此,当我试图坚持下去时,我会遇到以下异常: 原因:com。微软sqlserver。jdbc。SQLServerException:无法将值NULL插入“requestId”列、表“myDb”中。dbo。CertificateReassignmentRequestPolicy';列不允许空值。插入失败。 如果我将CertificateAs

  • 我有一对一关系的问题-保存后,外键总是被设置为空,即使我有关联的对象。我正在使用Hibernate4.3。7.最终版本为Spring 4.0。0.0版本和MySql 5.6数据库。 在我保存LawFirmProfile对象列后的情况下,参考lawFirm的lawFirm_id始终为空。 实体: 以下是负责保存此记录的代码: Hibernate和Spring配置: 道也是Spring豆,方法注释为@

  • 我在项目中有一对一外键关系映射的问题。 User.java 角色Java语言 这是错误: 导致原因:lass.validateMappingException:无法确定类型:lass.java:265角色,在表:用户,对于列:[inal.jar列(ro)]在org.hibernate.boot.internal.SimpleVmpl.validate类型(SimpleVmpl.java:329)~