0

I am new at Hibernate Annotations and I'd like to try an example.

I have two classes (Node and HyperEdge), when I run my application, it only creates a table for Node and not for HyperEdge.

This is the code I developed:

Node :

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="Node")
public class Node {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    @Column
    private String name;

    @Column(name="\"group\"")
    private Integer group;

    public Node() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Node(Integer id, String name, Integer group) {
        super();
        this.id = id;
        this.name = name;
        this.group = group;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getGroup() {
        return group;
    }

    public void setGroup(Integer group) {
        this.group = group;
    }

}

HyperEdge :

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name="HyperEdge")
public class HyperEdge {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    @Column
    private String title;

    public HyperEdge() {
        super();
        // TODO Auto-generated constructor stub
    }
    public HyperEdge(Integer id, String title) {
        super();
        this.id = id;
        this.title = title;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }

}

hibernate.cfg.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/exhiber</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create</property>

        <mapping class="com.hib.ex.entity.Node" />
        <mapping class="com.hib.ex.entity.HyperEdge" />

    </session-factory>

</hibernate-configuration>

HibernateDao :

import java.util.List;

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

import com.hib.ex.entity.HyperEdge;
import com.hib.ex.entity.Node;

public class HibExDao {

    public void saveNode(Node noeud) {

        SessionFactory sf = HibExUtil.getSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();

        session.save(noeud);

        session.getTransaction().commit();
        session.close();

    }

    public List listNode() {

        SessionFactory sf = HibExUtil.getSessionFactory();
        Session session = sf.openSession();

        List nodes = session.createQuery("FROM Node").list();
        session.close();
        return nodes;

    }

    public Node readNode(Integer id) {

        SessionFactory sf = HibExUtil.getSessionFactory();
        Session session = sf.openSession();

        Node noeud = (Node) session.get(Node.class, id);
        session.close();
        return noeud;

    }

    public void saveHyperEdge(HyperEdge he, String chaine) {

        SessionFactory sf = HibExUtil.getSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();

        he.setTitle(chaine);

        session.save(he);
        session.getTransaction().commit();
        session.close();

    }

    public List listHyperEdge() {

        SessionFactory sf = HibExUtil.getSessionFactory();
        Session session = sf.openSession();

        List hyperedges = session.createQuery("FROM HyperEdge").list();
        session.close();
        return hyperedges;

    }

    public HyperEdge readHyperEdge(Integer id) {

        SessionFactory sf = HibExUtil.getSessionFactory();
        Session session = sf.openSession();

        HyperEdge hyperEdge = (HyperEdge) session.get(HyperEdge.class, id);
        session.close();
        return hyperEdge;

    }

}

The main class :

import java.util.List;

import com.hib.ex.dao.HibExDao;
import com.hib.ex.entity.HyperEdge;
import com.hib.ex.entity.Node;

public class Run {


    public static void main(String[] args) {

        HibExDao dao = new HibExDao();

        System.out.println("****************WRITING****************");
        Node n1 = new Node();
        n1.setName("toto");
        dao.saveNode(n1);
        System.out.println("Node saved!");
        Node n2 = new Node();
        n2.setName("lala");
        dao.saveNode(n2);
        System.out.println("Node saved!");

        System.out.println("\n****************READING****************");
        List nodes = dao.listNode();
        System.out.println("Name in Node number 2 is: " + dao.readNode(2).getName());

    }

}

What is the problem? And how can I fix it?

Thanks!

1
  • 1
    Add an @Entity annotation to HyperEdge. Commented Jul 8, 2014 at 16:50

3 Answers 3

3

Perhaps you have to add @Entity annotation to your HyperEdge class

Sign up to request clarification or add additional context in comments.

Comments

2

@Entity annotation to missing from your HyperEdge class

The @Entity annotation is used to mark this class as an Entity bean. So the class should atleast have a package scope no-argument constructor.

The @Table annotation is used to specify the table to persist the data. The name attribute refers to the table name. If @Table annotation is not specified then Hibernate will by default use the class name as the table name.

Comments

0

In HyperEdge class you have to add @Entity annotation so that hibernate can treat it as a entity to map with table HyperEdge in database.

@Entity
@Table(name="HyperEdge")
public class HyperEdge {

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.