正如你所看到的,我有两个类,Person
和Item
,以及它们在数据库中对应的表,在App
类中,我试图使用Hibernate使用一对多关系来获取一个人的所有东西。
人
package org.example.model;
import jakarta.persistence.*;
import java.util.List;
@Entity
@Table(name = "person")
public class Person {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
@OneToMany(mappedBy = "owner")
private List<Item> items;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
项目
package org.example.model;
import jakarta.persistence.*;
@Entity
@Table(name = "item")
public class Item {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "item_name")
String itemName;
@ManyToOne
@JoinColumn(name = "person_id", referencedColumnName = "id")
private Person owner;
public Item() {
}
public Item(String itemName) {
this.itemName = itemName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
@Override
public String toString() {
return "Item{" +
"id=" + id +
", itemName='" + itemName + '\'' +
'}';
}
}
应用程序
package org.example;
import org.example.model.Item;
import org.example.model.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import java.time.Period;
import java.util.List;
public class App {
public static void main(String[] args) {
Configuration configuration = new Configuration()
.addAnnotatedClass(Period.class).addAnnotatedClass(Item.class);
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
try {
session.beginTransaction();
Person person = session.get(Person.class, 1);
System.out.println(person);
List<Item> items = person.getItems();
System.out.println(items);
session.getTransaction().commit();
} finally {
sessionFactory.close();
}
}
}
异常
Exception in thread "main" org.hibernate.AnnotationException: Association 'org.example.model.Item.owner' targets an unknown entity named 'org.example.model.Person'
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:97)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1879)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1826)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1733)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:300)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:97)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:402)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:90)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:735)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:773)
at org.example.App.main(App.java:23)
1.我尝试更改pom.xml中不同版本的依赖项以及java版本,并重新构建了项目。
1.想重新开课程。
1.我检查了DB连接(它在那里,因为它通过@Column
注解中的列名称来接收到我需要的列的转换)。
1条答案
按热度按时间evrscar21#
您在附加的Person类中出错。您附加了一个App类。