【问题标题】:Hsql error after inserting 2. object via hibernate2.通过hibernate插入对象后出现Hsql错误
【发布时间】:2012-02-16 18:51:07
【问题描述】:

我正在使用休眠将类餐的对象插入 hsql DB 如果我只插入 1 个对象,它可以正常工作,但是一旦我尝试插入第二个对象,它就会给我一个错误。这是我的代码和错误:

 public static void main(String[] args) {
    Main obj = new Main();
    Long mealId1 = obj.saveMeal("Pommes");
    Long mealId2 = obj.saveMeal("Doener1");
}

public Long saveMeal(String mealName)
{

    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = null;
    Long mealId = null;
    try {
        transaction = session.beginTransaction();
        Meal meal = new Meal(mealName);
        mealId = (Long) session.save(meal);
        transaction.commit();
    } catch (HibernateException e) {
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
    return mealId;
}


package data;
import java.util.List;
import java.util.LinkedList;

public class Meal implements java.io.Serializable {

private long id;
private String name;
private List<Image> images;
private List<Review> reviews;
private Grouping grouping;

public Meal() {
}

public Meal(String mealName) {
    name = mealName;

}

public Meal(long mealId, String mealName) {
    id = mealId;
    name = mealName;
}

public long getId() {
    return id;
}

public void setId(long mealId) {
    id = mealId;
}

public String getMealName() {
    return name;
}

public void setMealName(String mealName) {
    name = mealName;
}

public float getAvg() {
    float avg = 0;
    for (int i = 0; i < reviews.size(); i++)
    {
        avg = avg + reviews.get(i).getReviewPoints();
    }
    return avg;
}

public List<Image> getNumberImages(int number) {
    assert (number >= 0);
    return  images.subList(0, number) ;
}

public List<Image> getImages() {
    return images;
}

public void setImages(LinkedList<Image> images) {
    this.images = images;
}



public List<Review> getReviews(int number) {
    assert (number >= 0);
    return  reviews.subList(0, number) ;
}



public LinkedList<String> getAltNames() {
    LinkedList<String> altNames = new LinkedList<String>();
    LinkedList<Meal> altNameMeals = grouping.getMeals();
    for (int i = 0; i < altNameMeals.size(); i++)
    {
        altNames.add(altNameMeals.get(i).getMealName());
    }
    return altNames;
}

public void addReview(Review review) {
    if (!reviews.contains(review)) {
        reviews.add(review);
    }
}

public Grouping getGrouping() {
    return grouping;
}

public void setGrouping(Grouping grouping) {
    this.grouping = grouping;
}


public void addImage(Image image) {
    if (!images.contains(image)) {
        images.add(image);
    }
}<hibernate-mapping>
<class name="data.Meal" table="MEAL">
    <id name="id" type="long" access="field">
        <column name="ID" />
        <generator class="assigned" />
    </id>
    <property name="name" type="java.lang.String" access="field">
        <column name="NAME" />
    </property>


    <list name="images" inverse="false" table="IMAGE" lazy="true" access="field">
        <key>
            <column name="ID" />
        </key>
        <list-index column="column_name" />
        <one-to-many class="data.Image" />
    </list>
    <list name="reviews" inverse="false" table="REVIEW" lazy="true" access="field">
        <key>
            <column name="ID" />
        </key>
        <list-index></list-index>
        <one-to-many class="data.Review" />
    </list>


    <many-to-one name="grouping" class="data.Grouping" fetch="join">
        <column name="GROUPING" />
    </many-to-one>

</class>

首先是主要方法,第二是要持久化的类,第三是该类的休眠映射。这是错误信息:

843 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: -104, SQLState: 23505  
843 [main] ERROR org.hibernate.util.JDBCExceptionReporter - integrity constraint violation: unique constraint or index violation; SYS_PK_10585 table: MEAL  
843 [main] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session

【问题讨论】:

    标签: java sql eclipse hibernate hsqldb


    【解决方案1】:

    您声明要手动为 id 属性赋值 (&lt;generator class="assigned" /&gt;),但实际上并未赋值。

    所以,你需要手动赋值或者声明不同的id生成策略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 2019-03-24
      • 2016-03-21
      • 2017-08-29
      • 2019-06-05
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      相关资源
      最近更新 更多