[英]Unknown entity exception in hibernate by using annotations
I am getting unknown entity exception.I didn't understand why i am getting. 我收到了未知的实体异常。我不明白为什么会收到。
Customer.java Customer.java
package p1;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="customers")
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="cid")
private int cid;
@Column(name="cname")
private String cname;
@Column(name="email")
private String email;
@Column(name="phone")
private long phone;
@Column(name="city")
private String city;
@Column(name="bal")
private double bal;
Customer(){
System.out.println("default constructor");
}
//setters and getters
}
Lab.java Lab.java
package p1;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class Lab {
public static void main(String[] args) {
try{
Configuration cf=new Configuration().configure("p1/hibernate.cfg.xml").addAnnotatedClass(p1.Customer.class);
StandardServiceRegistryBuilder ssrbuilder=new StandardServiceRegistryBuilder();
StandardServiceRegistry ssRegistry=ssrbuilder.applySettings(cf.getProperties()).build();
SessionFactory factory=cf.buildSessionFactory(ssRegistry);
Session s=factory.openSession();
org.hibernate.Transaction t=s.beginTransaction();
p1.Customer c=new Customer();
c.setCity("Bangalore");
c.setCname("nithin1");
c.setEmail("nithin1@gmail.com");
c.setBal(21);
s.save(c);
t.commit();
s.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
hibernate.cfg.xml 的hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3307/nithin</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">create</property>
<property name="show_sql">true</property>
<mapping class="p1.Customer"/>
</session-factory>
</hibernate-configuration>
Exception in console 控制台异常
org.hibernate.MappingException: Unknown entity: p1.Customer at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:684) at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1692) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:122) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) at org.hibernate.internal.SessionImp org.hibernate.MappingException:未知实体:位于org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1692)的org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:684)的p1.Customer org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)处的org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:122)org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedId .java:38),位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177),位于org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)。 org.hibernate.internal.SessionImp上的internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) l.fireSave(SessionImpl.java:709) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:701) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:696) at p1.Lab.main(Lab.java:34)
l.fireSave(SessionImpl.java:709)位于org.hibernate.internal.SessionImpl.save(SessionImpl.java:701)位于org.hibernate.internal.SessionImpl.save(SessionImpl.java:696)位于p1.Lab.main (Lab.java:34)
please help thankyou. 请帮助谢谢。
It seems there is a typo in your hibernate.cfg.xml 您的hibernate.cfg.xml中似乎有错字
<mapping resource="p1.Customer.hbm.xml"/>
It should be 它应该是
<mapping resource="Customer.hbm.xml"/>
You should change the way you get session in class Lab1. 您应该更改在Lab1类中获取会话的方式。 It is something like:
就像这样:
package main;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import p1.Customer;
public class Main {
private static StandardServiceRegistry registry;
private static SessionFactory sessionFactory;
public static void main(String[] args) throws Exception {
try {
registry = new StandardServiceRegistryBuilder().configure().build();
// Create MetadataSources
MetadataSources sources = new MetadataSources(registry);
// Create Metadata
Metadata metadata = sources.getMetadataBuilder().build();
// Create SessionFactory
sessionFactory = metadata.getSessionFactoryBuilder().build();
Session s = sessionFactory.openSession();
Customer c = new Customer();
c.setCname("nithin");
org.hibernate.Transaction t = s.beginTransaction();
s.save(c);
t.commit();
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} }
And this is your file resources/hibernate.cfg.xml: 这是您的文件资源/hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">xxxx</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xxxx</property>
<property name="hibernate.connection.username">xxxx</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping resource="p1/Customer.hbm.xml"/>
</session-factory>
Then put your Customer.hbm.xml in the same folder of Entity Customer.java 然后将Customer.hbm.xml放在Entity Customer.java的同一文件夹中
I tested and it worked! 我进行了测试,并且有效!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.