2016-07-01 2 views
2

Это моя модель классы (AppInfo, Userinfo)Hibernate дает неизвестный объект исключения

@Entity 
@Table(appliesTo="appinfo") 
public class AppInfo { 

    @Id 
    @Column(name="appid") 
    private int appId; 

    @Column(name="appname") 
    private String appName; 

    @Column(name="roleid") 
    private int roleId; 

    @OneToMany(fetch=FetchType.LAZY,targetEntity=UserInfo.class,cascade=CascadeType.ALL) 
    @JoinColumn(name="Appid",referencedColumnName="appid") 
    private Set<UserInfo> userInfo; 

     // setters & getters 
} 

@Entity 
@Table(appliesTo = "userinfo") 
public class UserInfo { 

    @Id 
    @Column(name = "userid") 
    private int userId; 

    @Column(name = "username") 
    private String userName; 

      @Column(name = "hoid") 
      private String hoId; 
//setters & getters 
    } 

Мой HBM конфигурационный файл

<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
     <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:3306/taskdb</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="show_sql">true</property> 
     <mapping class="com.myproject.hibernate.model.UserInfo.java"></mapping> 
     <mapping class="com.myproject.hibernate.model.AppInfo.java"></mapping> 
    </session-factory> 

Моя утилита класса

public class UtilityAnnotation { 


       private static final SessionFactory sessionFactory = buildSessionFactory(); 

       @SuppressWarning 

s("deprecation") 
      private static SessionFactory buildSessionFactory() { 
       try { 
        // Create the SessionFactory from hibernate.cfg.xml 
        return new AnnotationConfiguration().configure().buildSessionFactory(); 
       } catch (Throwable ex) { 
        // Make sure you log the exception, as it might be swallowed 
        System.err.println("Initial SessionFactory creation failed." + ex); 
        throw new ExceptionInInitializerError(ex); 
       } 
      } 

      public static SessionFactory getSessionFactory() { 
       return sessionFactory; 
      } 

      public static void shutdown() { 
       // Close caches and connection pools 
       getSessionFactory().close(); 
      } 

    } 

И, наконец, главный класс

public class OneToMany { 

    public static void main(String[] args) { 
     Session session = UtilityAnnotation.getSessionFactory().openSession(); 
     session.beginTransaction(); 
     UserInfo info = new UserInfo(); 
     AppInfo ap = new AppInfo(); 

     ap.setAppId(1); 
     ap.setAppName("Check"); 
     ap.setRoleId(1); 

     info.setUserName("Grey"); 
     info.setUserId(4); 
     info.setHoneyId("4"); 

     Set<UserInfo> mys = new HashSet<UserInfo>(); 
     mys.add(info); 

     ap.setUserInfo(mys); 

     session.save(ap); 
     session.getTransaction().commit(); 
     session.close(); 
    } 
} 

при запуске основной следующее сообщение об ошибке класса Iget

Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.myproject.hibernate.model.AppInfo 
    at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:693) 
    at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1485) 
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713) 
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701) 
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697) 
    at com.myproject.hibernate.practice.OneToMany.main(OneToMany.java:32) 

я искал для решения и многие сказали, чтобы изменить отображение конфигурационный файл, где класс путь должен быть правильным, но я дал правильный путь к классу так Какая ошибка я делаю здесь.

У меня также есть отдельный основной класс, который добавляет информацию в userinfo и отлично работает.

+0

Рассмотрим проводке SSCCE - http://sscce.org/ –

ответ

2

Если вы хотите добавить свои объекты с помощью аннотаций, вам нужно добавить ваши аннотированные объекты в объекте конфигурации

new AnnotationConfiguration().configure().addAnnotatedClass(AppInfo.class).addAnnotatedClass(UserInfo.class).buildSessionFactory(); 

также удалить .java из отображения cl ass xml configuration, если вы используете конфигурацию xml

+0

Привет, я внес изменения в мой класс utilityannotaion return new AnnotationConfiguration(). Configure(). AddAnnotatedClass (AppInfo.class) .addAnnotatedClass (UserInfo.class) .buildSessionFactory (); и удалены .java, но такая же ошибка существует – pratt

+0

У меня есть еще один основной класс, который включал данные в userinfo, который отлично работает только тогда, когда я пытаюсь сделать это для многих, это не – pratt

+0

для вопроса «один ко многим», пожалуйста, создайте новый вопрос и отправьте свои объекты сопоставления – Saravana

1

Заменить

<mapping class="com.myproject.hibernate.model.UserInfo.java"></mapping> 
    <mapping class="com.myproject.hibernate.model.AppInfo.java"></mapping> 

с

<mapping class="com.myproject.hibernate.model.UserInfo"/> 
    <mapping class="com.myproject.hibernate.model.AppInfo"/> 
+0

Пробовал ту же ошибку – pratt

1

Используйте Java для включения Entity вместо xml, она более удобна в обслуживании и доступна для других разработчиков.

Текущее исключение вызвано .Java в конфигурации XML классов отображений

Если вы хотите добавить свои объекты с помощью аннотаций, предпочитают добавлять аннотированные объекты в объекте конфигурации

new AnnotationConfiguration().configure().addAnnotatedClass(AppInfo.class).addAnnotatedClass(UserInfo.class).buildSessionFactory(); 
Смежные вопросы