我正在尝试使用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)));
我很欣赏每一个答案,对不起,如果这是明显的,但我一定错过了什么错。谢谢。
答案 0 :(得分:1)
您必须确保将映射注释放在实体中的位置。要么把它们都放在吸气剂上,要么将它们全部放在田地上。
由于你把getter的Id注释,但是字段上的ManyToOne注释,Hibernate忽略了ManyToOne。
请注意,映射没有多大意义:用于唯一标识内容的列也不能用于引用框。并且box属性不能同时使用Column和JoinColumn注释。这是一个JoinColumn,而不是一个专栏。