序列生成器被忽略了

时间:2010-06-03 21:01:20

标签: hibernate spring jpa jboss annotations

保存对象时出现以下错误。但是,类似的配置适用于我的项目中的其他模型对象。任何帮助将不胜感激。

@Entity
@Table(name = "ENROLLMENT_GROUP_MEMBERSHIPS", schema = "LEAD_ROUTING")
public class EnrollmentGroupMembership implements Serializable, Comparable,Auditable {
    @javax.persistence.SequenceGenerator(name = "enrollmentGroupMemID", sequenceName = "S_ENROLLMENT_GROUP_MEMBERSHIPS")
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "enrollmentGroupMemID")
    @Column(name = "ID")
    private Long id;


@ManyToOne()
    @JoinColumn(name = "TIER_WEIGHT_OID", referencedColumnName = "OID", updatable = false, insertable = false)
    private TierWeight tierWeight;

    public EnrollmentGroupMembership() {

    }

}

代码:

@Entity
@Table(name = "TIER_WEIGHT", schema = "LEAD_ROUTING")
public class TierWeight implements Serializable, Auditable {

@SequenceGenerator(name = "tierSequence",sequenceName = "S_TIER_WEIGHT")
    @Column(name = "OID")
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "tierSequence")
    private Long id;

@OneToMany
    @JoinColumn(name = "TIER_WEIGHT_OID", referencedColumnName = "OID")
    private Set<EnrollmentGroupMembership> memberships;


    public TierWeight() {
    }
}

逻辑层的代码是

@Override
    public void createTier(String tierName, float weight) {
        TierWeight tier = new TierWeight();
        tier.setWeight(weight);
        tier.setTier(tierName);
        tierWeightDAO.create(tier);
    }

类似的许多配置正在完成整个项目。我不知道为什么这一个实例失败了。任何帮助将不胜感激。

以下是我得到的错误

  

引起:   org.hibernate.id.IdentifierGenerationException:   此类的ID必须是手动的   在调用save()之前分配:   edu.apollogrp.d2ec.model.TierWeight at   org.hibernate.id.Assigned.generate(Assigned.java:3   3)在   org.hibernate.event.def.AbstractSaveEventListener。   saveWithGeneratedId(AbstractSaveEventListener.java   :99)

日志文件告诉我们没有创建序列生成器tierSequence。然而,其他序列生成器正在创建。

  

2010-06-03 11:24:51,834 DEBUG   [org.hibernate.cfg.AnnotationBinder:]   处理注释   edu.apollogrp.d2ec.model.TierWeight.dateCreated   2010-06-03 11:24:51,834 DEBUG   [org.hibernate.cfg.AnnotationBinder:]   处理注释   edu.apollogrp.d2ec.model.TierWeight.dateCreated   2010-06-03 11:24:51,834 DEBUG   [org.hibernate.cfg.Ejb3Column:]   绑定列DATE_CREATED唯一   假

     

.......................................   .......................................   2010-06-03 11:24:51,756 DEBUG   [org.hibernate.cfg.AnnotationBinder:]   处理注释   edu.apollogrp.d2ec.model.CounselorAvailability.id   2010-06-03 11:24:51,756 DEBUG   [org.hibernate.cfg.Ejb3Column:]   绑定列OID唯一错误   2010-06-03 11:24:51,756 DEBUG   [org.hibernate.cfg.Ejb3Column:]   绑定列OID唯一错误   2010-06-03 11:24:51,756 DEBUG   [org.hibernate.cfg.AnnotationBinder:]   id是一个id 2010-06-03 11:24:51,756   DEBUG   [org.hibernate.cfg.AnnotationBinder:]   id是一个id 2010-06-03 11:24:51,756   DEBUG   [org.hibernate.cfg.AnnotationBinder:]   添加序列生成器的名称:   counselorAvailabilityID 2010-06-03   11:24:51,756调查   [org.hibernate.cfg.AnnotationBinder:]   添加序列生成器的名称:   counselorAvailabilityID


在调试时,我看到org.hibernate.impl.SessionFactoryImpl返回“Assigned”identifierGenerator。这太可怕了。我已将identifierGenerator指定为“Auto”。请参阅上面的代码。

作为旁注,我试图调试并查看如何从数据库中检索对象。看起来注册组成员记录已填充了权重值。但是,如果我查看了tierweight对象,则它没有enrollmentgroupmembership记录。我很困惑。我认为这两个问题必须相关。

麦迪。

1 个答案:

答案 0 :(得分:0)

我想@OneToMany配置应如下所示。

  • @OneToMany(的mappedBy = “tierWeight”)