在hibernate中制作示例程序

时间:2011-06-18 19:06:42

标签: java hibernate

我在hibernate中制作示例程序遵循本教程: 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();
}

它给我错误:事件事件= dao.findById(1); 因为在这里,我正在传递int。在EventsDAO.java中,其类型为EventsID。

请建议。

如同丁香所示, 现在它给出了例外: 线程“main”中的异常org.hibernate.id.IdentifierGenerationException:在调用save()之前必须手动分配此类的ID: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"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Mapping file autogenerated by MyEclipse Persistence Tools -->
<hibernate-mapping>
<class name="com.hibernate.Events" table="EVENTS" schema="APP">
<composite-id name="id" class="com.hibernate.EventsId">
<key-property name="uid" type="java.lang.Long"> <column name="UID" />
</key-property>
<key-property name="name" type="java.lang.String"> <column name="NAME" length="20" />
</key-property>
<key-property name="duration" type="java.lang.Integer"> <column name="DURATION" /> </key-property>
</composite-id>
</class>
</hibernate-mapping>

请帮忙。

2 个答案:

答案 0 :(得分:0)

您确定tutorial没有要求举办活动吗?

等等 - 现在我看到了你的问题。您的教程来自Rose India。我坚持使用源代码并使用JBoss的Hibernate教程。

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;
    }
}

答案 1 :(得分:0)

尝试使用Integer作为ID,除非您使用复合键:

    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;
        }
    }
相关问题