【问题标题】:sequence generators are getting ignored序列生成器被忽略
【发布时间】:2010-06-03 21:01:20
【问题描述】:

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

@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.apolllogrp.d2ec.model.TierWeight 在 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 调试 [org.hibernate.cfg.AnnotationBinder:] 处理注释 edu.apolllogrp.d2ec.model.TierWeight.dateCreated 2010-06-03 11:24:51,834 调试 [org.hibernate.cfg.AnnotationBinder:] 处理注释 edu.apolllogrp.d2ec.model.TierWeight.dateCreated 2010-06-03 11:24:51,834 调试 [org.hibernate.cfg.Ejb3Column:] 绑定列 DATE_CREATED 唯一 假的

.................................................. …………………………………………………………………………………………………………………………………… 2010-06-03 11:24:51,756 调试 [org.hibernate.cfg.AnnotationBinder:] 处理注释 edu.apolllogrp.d2ec.model.CounselorAvailability.id 2010-06-03 11:24:51,756 调试 [org.hibernate.cfg.Ejb3Column:] 绑定列 OID 唯一 false 2010-06-03 11:24:51,756 调试 [org.hibernate.cfg.Ejb3Column:] 绑定列 OID 唯一 false 2010-06-03 11:24:51,756 调试 [org.hibernate.cfg.AnnotationBinder:] id 是一个 id 2010-06-03 11:24:51,756 调试 [org.hibernate.cfg.AnnotationBinder:] id 是一个 id 2010-06-03 11:24:51,756 调试 [org.hibernate.cfg.AnnotationBinder:] 添加具有名称的序列生成器: 辅导员有空ID 2010-06-03 11:24:51,756 调试 [org.hibernate.cfg.AnnotationBinder:] 添加具有名称的序列生成器: 辅导员可用性ID


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

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

麦迪。

【问题讨论】:

标签: hibernate spring jpa jboss annotations


【解决方案1】:

我猜@OneToMany 配置应该如下所示。

  • @OneToMany(mappedBy="tierWeight")

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多