Hibernate加入列

时间:2016-11-24 17:47:35

标签: java database hibernate

我正在尝试使用Hibernate在MySQL DB中的2个表中创建连接列,但是,我似乎无法让它工作。我对此真的很陌生,所以也许我之前没有正确理解它。

我正在为我的学校创建一个测验项目。老师能够创建任务。我为此创建了一个ER diagram。如果有什么我应该改变的话,我愿意接受所有的建议。

它变得有点凌乱,所以我刚刚创建了一个新项目(但想法是一样的),这样就更容易在代码中迷失方向。我正在尝试加入表格Box(项目中的教师)和Stuff(项目中的任务)。简单来说,我已经尝试了一些带注释的变体,但它也没有用。

Box class

for (i = 0; i < d; i++) {
    for (j = 0; j < d / 2; j++) {
        int temp = a[i][j];
        a[i][j] = a[i][d - j -1];
        a[i][d - j -1] = temp;
    }
}

东西类

@Entity
public class Box {

private int size, box_id;

private String name, shape, colour, material;

public Box(String name, int size, String shape, String colour, String material) {
    this.name = name;
    this.size = size;
    this.shape = shape;
    this.colour = colour;
    this.material = material;
}

public Box() {

}

@Id
@GenericGenerator(name="id" , strategy="increment")
@GeneratedValue(generator="id")
public int getBox_id() {
    return box_id;
}

public void setBox_id(int box_id) {
    this.box_id = box_id;
}

@Column(nullable = false)
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Column(nullable = false)
public int getSize() {
    return size;
}

public void setSize(int size) {
    this.size = size;
}

@Column(nullable = false)
public String getShape() {
    return shape;
}

public void setShape(String shape) {
    this.shape = shape;
}

@Column(nullable = false)
public String getColour() {
    return colour;
}

public void setColour(String colour) {
    this.colour = colour;
}

@Column(nullable = false)
public String getMaterial() {
    return material;
}

public void setMaterial(String material) {
    this.material = material;
}
}

之后,我只是尝试将3个Box实例和9个Stuff实例放入DB中,就像这样。

 @Entity
    public class Stuff {

        private int amount, stuff_id;

        private String name, type, colour, material;

        @ManyToOne
        @JoinColumn(name = "stuff_id")

        private Box box;

        public Stuff(String name, int amount, String type, String colour, String material, Box box) {
            this.name = name;
            this.amount = amount;
            this.type = type;
            this.colour = colour;
            this.material = material;
            this.box = box;
        }

        public Stuff() {
        }

        @Id
        @GenericGenerator(name="id" , strategy="increment")
        @GeneratedValue(generator="id")
        public int getStuff_id() {
            return stuff_id;
        }

        public void setStuff_id(int stuff_id) {
            this.stuff_id = stuff_id;
        }

        @Column(nullable = false)
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Column(nullable = false)
        public int getAmount() {
            return amount;
        }

        public void setAmount(int amount) {
            this.amount = amount;
        }

        @Column(nullable = false)
        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        @Column(nullable = false)
        public String getColour() {
            return colour;
        }

        public void setColour(String colour) {
            this.colour = colour;
        }

        @Column(nullable = false)
        public String getMaterial() {
            return material;
        }

        public void setMaterial(String material) {
            this.material = material;
        }

        @Column(nullable = false)
        public Box getBox() {
            return box;
        }

        public void setBox(Box box) {
            this.box = box;
        }
        }

我得到的错误是:

new BoxDao().instertBox(new Box("box1", 10, "cube", "green", "cardboard"));
new StuffDao().instertStuff(new Stuff("stuff1", 5, "toys", "red", "plastic", new BoxDao().getBoxById(1)));

我很欣赏每一个答案,对不起,如果这是明显的,但我一定错过了什么错。谢谢。

1 个答案:

答案 0 :(得分:1)

您必须确保将映射注释放在实体中的位置。要么把它们都放在吸气剂上,要么将它们全部放在田地上。

由于你把getter的Id注释,但是字段上的ManyToOne注释,Hibernate忽略了ManyToOne。

请注意,映射没有多大意义:用于唯一标识内容的列也不能用于引用框。并且box属性不能同时使用Column和JoinColumn注释。这是一个JoinColumn,而不是一个专栏。