Java hibernate:@OneToMany协会不';行不通
在我的代码中,Java hibernate:@OneToMany协会不';行不通,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,在我的代码中,customer类和item类之间有一个oneToMany关系。这意味着,客户可能有一个或多个项目。 以下是客户代码: @Entity @Data public class customer { @Id @GeneratedValue int id; String name; String lastname; @Embedded Address address; @OneToMany @Column
customer
类和item
类之间有一个oneToMany
关系。这意味着,客户可能有一个或多个项目。
以下是客户代码:
@Entity
@Data
public class customer {
@Id
@GeneratedValue
int id;
String name;
String lastname;
@Embedded
Address address;
@OneToMany
@Column(name="ITEM_ID")
List<item> item;
}
然后,我做了一些测试来尝试在模型中进行查询
insert into item(id,name,Serialnumber,price) values(1,'bike','123',200);
insert into item(id,name,Serialnumber,price) values(2,'car','123',200);
insert into customer(id,name,lastname,Country,City,Street,No,item_id)
values(1,'Salman','Lashkarara','Iran','Tehran','Shariati','12',1);
insert into customer(id,name,lastname,Country,City,Street,No,item_id)
values(2,'Saba','Lashkarara','Iran','Tehran','Shariati','12',2);
insert into customer(id,name,lastname,Country,City,Street,No,item_id)
values(3,'Saba','Lashkarara','Iran','Tehran','Shariati','12',1);
但当我运行代码时,我会遇到以下错误:
Column "ITEM_ID" not found; SQL statement:
insert into customer(id,name,lastname,Country,City,Street,No,item_id) values(1,'Salman','Lashkarara','Iran','Tehran','Shariati','12',1)
请特别注意,它是一个java mvc spring
应用程序,我使用该代码创建模型,因此没有数据库来检查字段项\u id
如您所见,我已经添加了@列(name=“ITEM\u ID”)
来定义列。您必须使用关联列:
@OneToMany
@JoinColumn(name="ITEM_ID")
List<item> item;
@OneToMany
@JoinColumn(name=“ITEM\u ID”)
清单项目;
其他一些选项
@OneToMany(cascade=CascadeType.All, fetch=FetchType.EAGER)
@JoinColumn(name="ITEM_ID")
List<item> item;
你可以这样做,我还有
user
类和bcr
类,一个用户有多个bcr,所以下面的代码将帮助你
bcr.java
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_who_enter_demand", nullable = false)
public User getUserByUserWhoEnterDemand() {
return this.userByUserWhoEnterDemand;
}
public void setUserByUserWhoEnterDemand(User userByUserWhoEnterDemand) {
this.userByUserWhoEnterDemand = userByUserWhoEnterDemand;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "userByUserWhoEnterDemand")
public Set<BudgetControlRegister> getBudgetControlRegistersForUserWhoEnterDemand() {
return this.budgetControlRegistersForUserWhoEnterDemand;
}
public void setBudgetControlRegistersForUserWhoEnterDemand(Set<BudgetControlRegister> budgetControlRegistersForUserWhoEnterDemand) {
this.budgetControlRegistersForUserWhoEnterDemand = budgetControlRegistersForUserWhoEnterDemand;
}
user.java
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_who_enter_demand", nullable = false)
public User getUserByUserWhoEnterDemand() {
return this.userByUserWhoEnterDemand;
}
public void setUserByUserWhoEnterDemand(User userByUserWhoEnterDemand) {
this.userByUserWhoEnterDemand = userByUserWhoEnterDemand;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "userByUserWhoEnterDemand")
public Set<BudgetControlRegister> getBudgetControlRegistersForUserWhoEnterDemand() {
return this.budgetControlRegistersForUserWhoEnterDemand;
}
public void setBudgetControlRegistersForUserWhoEnterDemand(Set<BudgetControlRegister> budgetControlRegistersForUserWhoEnterDemand) {
this.budgetControlRegistersForUserWhoEnterDemand = budgetControlRegistersForUserWhoEnterDemand;
}
@OneToMany(fetch=FetchType.LAZY,mappedBy=“userbyuserwhenterdemand”)
公共设置getBudgetControlRegistersForUserWhoEnterDemand()的GetBudgetControlRegisters{
返回此.BudgetControlRegistersforUserWhenterDemand;
}
public void setBudgetControlRegistersForUserWhoEnterDemand(设置budgetControlRegistersForUserWhoEnterDemand){
this.budgetControlRegistersForUserWhoEnterDemand=budgetControlRegistersForUserWhoEnterDemand;
}
如果没有表,则无法映射表列:
@Entity
@Table(name = "ITEM_TABLE")
public class item {
...
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "CUSTOMER_ID_ITEM_TABLE")
private customer customer;
...
}
@Entity
@Table(name = "CUSTOMER_TABLE")
public class customer {
...
@OneToMany
@Column(name="ITEM_ID")
List<item> item;
}
@实体
@表(name=“ITEM_Table”)
公共类项目{
...
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“客户ID项目表”)
私人客户;
...
}
@实体
@表(name=“CUSTOMER\u Table”)
公共类客户{
...
@独身癖
@列(name=“ITEM\u ID”)
清单项目;
}
这对我来说毫无意义。一个客户可以有多个项目。因此,对项目的引用不可能在客户表中。您在这里发布的映射很可能创建了customer和item之间的n:m映射表。如果使用mappedBy属性,则引用可能位于项表中(作为对客户的引用),如果我是正确的,则项id列位于项表中,并且您尝试将其插入到客户表中。可能您必须更改/重建架构以反映映射更改。