0 0

hibernate用注解 一对多 报Could not determine type for错误5

配置文件
hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory>
       <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
       <property name="connection.username">root</property>
       <property name="connection.password">root</property>
       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
       <property name="show_sql">true</property>
    
      
       <mapping class="tests.cn.com.taiji.sms.entiry.Book" />
       <mapping class="tests.cn.com.taiji.sms.entiry.Student" />
     
    </session-factory>
    </hibernate-configuration>
Student.java
package tests.cn.com.taiji.sms.entiry;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import tests.cn.com.taiji.sms.entiry.Book;

@Entity
@Table(name="stuent")
public class Student
{
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;


private String memo;


private String name;


private List<Book> book;

public int getId() {
   return id;
}

public void setId(int id) {
   this.id = id;
}
@Column(name="meno")
public String getMemo() {
   return memo;
}

public void setMemo(String memo) {
   this.memo = memo;
}
@Column(name="name")
public String getName() {
   return name;
}

public void setName(String name) {
   this.name = name;
}
         
@OneToMany(mappedBy="student",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
public List<Book> getBook()
{
   return book;
}

public void setBook(List<Book> book)
{
   this.book = book;
}


}

BOOK.java
package tests.cn.com.taiji.sms.entiry;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name="zqBook")
public class Book
{
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

private String title;

private Student student;

public int getId() {
   return id;
}

public void setId(int id) {
   this.id = id;
}
@Column(name="title")
public String getTitle() {
   return title;
}

public void setTitle(String title) {
   this.title = title;
}
   
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name="stu_id",referencedColumnName="id")
public Student getStudent() {
   return student;
}

public void setStudent(Student student) {
   this.student = student;
}


}
StudentBookManager

package tests.cn.com.taiji.mhsms.manager;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import tests.cn.com.taiji.mhsms.web.BasicSessionFactory;
import tests.cn.com.taiji.sms.entiry.Book;
import tests.cn.com.taiji.sms.entiry.Student;

public class StudentBookManager
{
public static void main(String[] args)
{
 
   Student student=new Student();
   Book book1=new Book();
   Book book2=new Book();
   student.setName("王11");
   List<Book> listBook=new ArrayList<Book>();
 
   book1.setTitle("英语");
   book2.setTitle("语文");
   book1.setStudent(student);
   book2.setStudent(student);
 
   listBook.add(book1);
   listBook.add(book2);
   student.setBook(listBook);
 
   Session session=null;
   Transaction tx=null;
   try
   {
    SessionFactory sessionFactory=BasicSessionFactory.sessionFactory;
    session=sessionFactory.openSession();
    tx=session.beginTransaction();
    tx.begin();
    session.save(student);
    tx.commit();
  
   }catch(Exception e)
   {
  
    e.printStackTrace();
  
   }
   finally
   {
    //session.close();
   }
}
}

公共类:
BasicSessionFactory

package tests.cn.com.taiji.mhsms.web;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class BasicSessionFactory
{
public static SessionFactory sessionFactory;

static
{
   sessionFactory=new AnnotationConfiguration().configure("/hibernate/hibernate.cfg.xml").buildSessionFactory();///注意是AnnotationConfiguration,而不是Configuration

}
}

--------------------------------
在运行StudentBookManager时,出现
Exception in thread "main" java.lang.ExceptionInInitializerError
at tests.cn.com.taiji.mhsms.manager.StudentBookManager.main(StudentBookManager.java:39)
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: stuent, for columns: [org.hibernate.mapping.Column(book)]

自己试了试将,将标注写到字段上就不会出现这些问题!


我们现在做的工程,就完全可以写在get方法上,请各位高人给指点一下为啥不能写在get方法上呢?自己从网上搜了一下,说必须要么全部写在字段上,要么全部写在get 方法上,但我的这个都是写在了get方法上,为什么还是不行呢?


解决方案:
自己试了近两天,终于将问题找出来了,在一个实体文件中,注解要么全部放在字段上,要么全部放在get方法上,不能混合使用!
2010年8月26日 15:32
目前还没有答案

相关推荐

Global site tag (gtag.js) - Google Analytics