gpt4 book ai didi

java - Hibernate 连接列

转载 作者:行者123 更新时间:2023-12-01 09:13:06 24 4
gpt4 key购买 nike

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

我正在为我的学校创建一个测验项目。教师能够创建任务。我创建了一个ER diagram为了这。如果有什么我需要改变的地方,我愿意接受所有建议。

它变得有点困惑,所以我刚刚创建了一个新项目(但想法是相同的),这样就更容易不迷失在代码中。我正在尝试加入表 Box(项目中的教师)和 Stuff(项目中的任务)。只是简单说明一下,我尝试了注释的一些变体,但它也不起作用。

盒子类

@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;
}
}

东西类

 @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;
}
}

之后,我尝试将 3 个 Box 实例和 9 个 Stuff 实例放入数据库,如下所示。

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

我收到的错误是这样的:

Caused by: org.hibernate.MappingException: Could not determine type for: model.Box, at table: Stuff, for columns: [org.hibernate.mapping.Column(box)]

我很欣赏每一个答案,很抱歉,如果这是显而易见的事情,但我一定是错过了问题所在。谢谢。

最佳答案

您在实体中放置映射注释的位置必须保持一致。要么将它们全部放在 setter/getter 上,要么将它们全部放在字段上。

由于您将 getter 的 Id 注解放在了 getter 上,而将 ManyToOne 注解放在了字段上,因此 ManyToOne 会被 Hibernate 忽略。

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

关于java - Hibernate 连接列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40792245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com