Spring 启动 ManyToOne 关系
Spring Boot ManyToOne relationship
我正在尝试在字段上使用 Sprint 启动 ManyToOne 注释。 Order
class
我的代码看起来像这样
package com.example.demo_app.data.models;
import javax.persistence.*;
@Entity
public class Order extends Object {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "person_id")
private Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
Person
class 看起来像这样
package com.example.demo_app.data.models;
import javax.persistence.*;
import java.util.List;
@Entity
public class Person {
private Long id;
@OneToMany(targetEntity = Order.class)
private List<Order> orders;
public void setId(Long id) {
this.id = id;
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
}
这是我遇到的错误
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: java.util.List, at table: person, for columns: [org.hibernate.mapping.Column(orders)]
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: person, for columns: [org.hibernate.mapping.Column(orders)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:512)
感谢任何帮助。谢谢!
您遇到错误,因为 ORDER
是 SQL 关键字。
尝试将 table class Order
的名称更改为其他名称
@Entity
@Table(name="ORDERS")
public class Order {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "person_id")
private Person person;
//getters and setters
}
编辑:这是 Person
class,将注释 @Id
和 @GeneratedValue
放在 id 字段上,而不是 getter。
@Entity
@Table(name = "PERSON")
public class Person {
@Id
@GeneratedValue
private Long id;
@OneToMany(targetEntity = Order.class)
private List<Order> orders;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
}
我正在尝试在字段上使用 Sprint 启动 ManyToOne 注释。 Order
class
package com.example.demo_app.data.models;
import javax.persistence.*;
@Entity
public class Order extends Object {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "person_id")
private Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
Person
class 看起来像这样
package com.example.demo_app.data.models;
import javax.persistence.*;
import java.util.List;
@Entity
public class Person {
private Long id;
@OneToMany(targetEntity = Order.class)
private List<Order> orders;
public void setId(Long id) {
this.id = id;
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
}
这是我遇到的错误
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: java.util.List, at table: person, for columns: [org.hibernate.mapping.Column(orders)]
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: person, for columns: [org.hibernate.mapping.Column(orders)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:512)
感谢任何帮助。谢谢!
您遇到错误,因为 ORDER
是 SQL 关键字。
尝试将 table class Order
的名称更改为其他名称
@Entity
@Table(name="ORDERS")
public class Order {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "person_id")
private Person person;
//getters and setters
}
编辑:这是 Person
class,将注释 @Id
和 @GeneratedValue
放在 id 字段上,而不是 getter。
@Entity
@Table(name = "PERSON")
public class Person {
@Id
@GeneratedValue
private Long id;
@OneToMany(targetEntity = Order.class)
private List<Order> orders;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
}