Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何级联插入_Java_Hibernate_Foreign Key Relationship - Fatal编程技术网

Java 如何级联插入

Java 如何级联插入,java,hibernate,foreign-key-relationship,Java,Hibernate,Foreign Key Relationship,更新2014-01-29:我更改了关系,因此实体代码和错误也更改了 我必须在数据库中存储一些数据,我的关系如下: 订单3D 1------*画1------*线 我想这样保存一切: Order3d o=new Order3d(); //add data to order (lines and draws) Session s=HibernateUtils.getSessionFactory().openSession(); s.save(o); s.close(); 我没有运行时错误,但现在没

更新2014-01-29:我更改了关系,因此实体代码和错误也更改了

我必须在数据库中存储一些数据,我的关系如下: 订单3D 1------*画1------*线 我想这样保存一切:

Order3d o=new Order3d();
//add data to order (lines and draws)
Session s=HibernateUtils.getSessionFactory().openSession();
s.save(o);
s.close();
我没有运行时错误,但现在没有插入我的行(仅保存order3d和drawfile)

以下是我的实体(显然,它们是POJO,所以我没有复制getter和setter):

(1) 订单和订单行之间存在双向关系。 Hibernate希望您像这样方便地为行分配顺序:

@Entity
@Table(name="ORDERS")       
public class Order {
    [...]

    public void addLine(OrderLine line) {
        line.setOrder(this);
        myLines.add(line);
    }

}
另请参见线程

(2) 不接受“订单”作为有效的表名。例如,选择“订单”

(3) 您忘记了订单行和绘图之间的一对一关系上的“级联”选项。考虑使用@嵌入而不是@ OnEthOne。 我总结了最简单的工作示例:

订单:

@Entity
@Table(name = "ORDERS")
public class Order {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column (name = "id")
    private Long id;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name="line_id", nullable = false)
    private Set<OrderLine> lines = new HashSet<OrderLine>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Set<OrderLine> getLines() {
        return lines;
    }

    public void setLines(Set<OrderLine> lines) {
        this.lines = lines;
    }

    public void addLine(OrderLine line) {
        line.setOrder(this);
        lines.add(line);
    }
}
订单抽签(无论这是什么)


看起来在保存“ObjectLine”对象之前,“DrawLine”对象未被持久化。尝试将“cascade=CascadeType.ALL”添加到“OrderLine”类中的“drawine draw”中。
@Id@OneToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL)@JoinColumn(name=“draw”)@Embedded private DrawFile draw我仍然收到相同的错误,我添加了您的代码并替换了
neworder().getmyline().add(sometline)通过
新订单().addLine(someline)和我得到了相同的错误:(请将这些设置添加到您的hibernate配置中,并将日志输出附加到您的问题:hibernate.show\u sql=true hibernate.format\u sql=true
hibernate:insert into order(交货、需求日期、估计日期、人工费用、修改、订单日期、人员、状态、差旅费用、有效日期)值(?,,,,,,,,,,,,,,,,?)休眠:选择orderlin_uu2.order、orderlin_u2.material、orderlin_u2.draw、orderlin_2.color、orderlin_2.depth作为深度3_2、orderlin_2.duration作为持续时间4_2、orderlin_2.height作为高度5_2、orderlin_2.Producted作为产量6_2、orderlin_2.quantity作为数量7_2、orderlin_2.width作为宽度8_2,其中orderlin_2.orderlin=和orderlin_2.material=?和orderlin\uu0.draw=?和orderlin\u0.color=?
我不知道您使用的是哪一个DB,但我怀疑代码中还有另一个小问题:“order”不是一个有效的表名。我为您准备了一个工作示例。请参阅更新的答案。我真正的表名不是order,而是Order3d(我认为这样更简单)。我添加了我的表创建说明。我不明白没有列名的代码(我也是一名hibernate初学者)如何使用映射。我是否需要在带有后缀_id?(order3d->order3d_id)的OrderLine表中更改order3d
@Entity
@Table(name="ORDERS")       
public class Order {
    [...]

    public void addLine(OrderLine line) {
        line.setOrder(this);
        myLines.add(line);
    }

}
@Entity
@Table(name = "ORDERS")
public class Order {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column (name = "id")
    private Long id;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name="line_id", nullable = false)
    private Set<OrderLine> lines = new HashSet<OrderLine>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Set<OrderLine> getLines() {
        return lines;
    }

    public void setLines(Set<OrderLine> lines) {
        this.lines = lines;
    }

    public void addLine(OrderLine line) {
        line.setOrder(this);
        lines.add(line);
    }
}
@Entity
@Table(name = "ORDER_LINES")
public class OrderLine {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column (name = "id")
    private Long id;

    @ManyToOne(fetch = FetchType.EAGER)
    private Order order;

    @Column(name = "content")
    private String content;

    @Embedded
    private OrderDraw draw;

    public OrderDraw getDraw() {
        return draw;
    }

    public void setDraw(OrderDraw draw) {
        this.draw = draw;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Order getOrder() {
        return order;
    }

    public void setOrder(Order order) {
        this.order = order;
    }
}
@Embeddable
public class OrderDraw {
    private int width;
    private int height;

    public OrderDraw() {
        this(0,0);
    }

    public OrderDraw(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }
}