создание примера программы в спящем режиме - PullRequest
2 голосов
/ 18 июня 2011

я делаю пример программы в спящем режиме, следуйте этому уроку: http://www.myeclipseide.com/documentation/quickstarts/hibernateintroduction/

используя реверс-инжиниринг, я создал этот метод. EventsDAO.java:

public Events findById(com.hibernate.EventsId i) {
    log.debug("getting Events instance with id: " + i);
    try {
        Events instance = (Events) getSession().get(
                "com.hibernate.Events", i);
        return instance;
    } catch (RuntimeException re) {
        log.error("get failed", re);
        throw re;
    }
}

и вызов из основного класса для создания этого метода:

private static void listEvents()
{
    EventsDAO dao= new EventsDAO();
    Events events= dao.findById(1);
    printEvents("Printing User,", events);
dao.getSession().close();
}

выдает ошибку: Events events = dao.findById (1); потому что здесь я передаю Int. и в EventsDAO.java его тип - EventsID.

пожалуйста, предложите.

как предполагает surlac, сейчас это исключение: Исключение в потоке "main" org.hibernate.id.IdentifierGenerationException: идентификаторы для этого класса должны быть назначены вручную перед вызовом save (): com.hibernate.Events

private static void addEvents()
{
    Events events= new Events();
    events.setUid(1);
    events.setName("abc");
    events.setDuration(123);
    EventsDAO dao= new EventsDAO();
    Transaction tx=dao.getSession().beginTransaction();
dao.save(events);
tx.commit();
dao.getSession().close();
}

это исключение в этой строке:

dao.save(events);

Вот файл Events.hbm.xml: <?xml version="1.0" encoding="utf-8"?><br> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --><br> <hibernate-mapping><br> <class name="com.hibernate.Events" table="EVENTS" schema="APP"><br> <composite-id name="id" class="com.hibernate.EventsId"><br> <key-property name="uid" type="java.lang.Long"> <column name="UID" /><br> </key-property><br> <key-property name="name" type="java.lang.String"> <column name="NAME" length="20" /><br> </key-property><br> <key-property name="duration" type="java.lang.Integer"> <column name="DURATION" /> </key-property><br> </composite-id><br> </class><br> </hibernate-mapping>

помогите пожалуйста.

Ответы [ 2 ]

0 голосов
/ 19 июня 2011

Попробуйте использовать Integer в качестве идентификатора, если вы не используете составные ключи:

    public Events findById( java.lang.Integer id) {
        log.debug("getting Events instance with id: " + id);
        try {
            Events instance = (Events) getSession()
                    .get("com.hibernate.Events", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }
0 голосов
/ 18 июня 2011

Вы уверены, что учебник не призывает к событию?

Подождите - теперь я вижу вашу проблему. Ваш урок от Rose India. Я бы придерживался источника и использовал учебник Hibernate от JBoss.

import java.util.Date;

public class Event {
    private Long id;

    private String title;
    private Date date;

    public Event() {}

    public Long getId() {
        return id;
    }

    private void setId(Long id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...