org.hibernate.MappingException: Could not determine type for: java.util.List, at table: College, for columns: [org.hibernate.mapping.Column(students)]

hibernate, java, orm

Solution

You are using field access strategy (determined by @Id annotation). Put any JPA related annotation right above each field instead of getter property

@OneToMany(targetEntity=Student.class, mappedBy="college", fetch=FetchType.EAGER)
private List<Student> students;

Problem

I'm using Hibernate for all CRUD operations in my project. It doesn't work for One-To-Many and Many-To-One relationships. It gives me the below error. `org.hibernate.MappingException: Could not determine type for: java.util.List, at table: College, for columns: [org.hibernate.mapping.Column(students)]` Then again i went through this video tutorial. It is very simple to me, in the beginning. But, i cant make it work. It also now, says `org.hibernate.MappingException: Could not determine type for: java.util.List, at table: College, for columns: [org.hibernate.mapping.Column(students)]` I have ran some searches in the internet, there someone telling its a bug in Hibernate, and some says, by adding @GenereatedValue this error ll be cleared, but it doesn't work for me. College.java ``` @Entity public class College { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int collegeId; private String collegeName; private List<Student> students; @OneToMany(targetEntity=Student.class, mappedBy="college", fetch=FetchType.EAGER) public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; }//Other gettters & setters omitted ``` Student.java ``` @Entity public class Student { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int studentId; private String studentName; private College college; @ManyToOne @JoinColumn(name="collegeId") public College getCollege() { return college; } public void setCollege(College college) { this.college = college; }//Other gettters & setters omitted ``` Main.java: ``` public class Main { private static org.hibernate.SessionFactory sessionFactory; public static SessionFactory getSessionFactory() { if (sessionFactory == null) { initSessionFactory(); } return sessionFactory; } private static synchronized void initSessionFactory() { sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } public static Session getSession() { return getSessionFactory().openSession(); } public static void main (String[] args) { Session session = getSession(); Transaction transaction = session.beginTransaction(); College college = new College(); college.setCollegeName("Dr.MCET"); Student student1 = new Student(); student1.setStudentName("Peter"); Student student2 = new Student(); student2.setStudentName("John"); student1.setCollege(college); student2.setCollege(college); session.save(student1); session.save(student2); transaction.commit(); } } ``` Console: ``` Exception in thread "main" org.hibernate.MappingException: Could not determine type for: java.util.List, at table: College, for columns: [org.hibernate.mapping.Column(students)] at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:306) at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:290) at org.hibernate.mapping.Property.isValid(Property.java:217) at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:463) at org.hibernate.mapping.RootClass.validate(RootClass.java:235) at org.hibernate.cfg.Configuration.validate(Configuration.java:1330) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1833) at test.hibernate.Main.initSessionFactory(Main.java:22) at test.hibernate.Main.getSessionFactory(Main.java:16) at test.hibernate.Main.getSession(Main.java:27) at test.hibernate.Main.main(Main.java:43) ``` The XML: ``` <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/dummy</property> <property name="connection.username">root</property> <property name="connection.password">1234</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping class="test.hibernate.Student" /> <mapping class="test.hibernate.College" /> </session-factory> ```

Original source