ORA-00972: ID des Orakels im Ruhezustand ist zu lang

Ich bin mit diesem Problem fest. Das Datenbankschema wurde von einer anderen Person bereitgestellt, daher kann ich die Namen nicht einfach ändern. Ich habe versucht, überall richtige Anmerkungen hinzuzufügen, vielleicht fehlt mir etwas (offensichtlich)?

Hier ist mein vollständiges Mapping (ziemlich viele Klassenkameraden), ich werde Getter / Setter weglassen.

Das Problem ist, wenn der Ruhezustand versucht, alles zu bekommenList<ControlRuleAttrib> controlRuleAttribs

Kontrollregel

@Entity
@Table(name = "CONTROL_RULE")
public class ControlRule implements Serializable {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @Column(name = "CONTROL_RULE_ID")
 private Long id;
 @ManyToOne(fetch = FetchType.LAZY)
 @Cascade(CascadeType.ALL)
 @JoinColumn(name = "CONTROL_RULE_TYPE_ID")
 @ForeignKey(name = "CONTROL_RULE_TYPE_ID")
 private ControlRuleType controlRuleType;
 @Column(name = "JOB_NM")
 private String jobname;
 @Column(name = "LIBRARY_NM")
 private String libraryname;
 @Column(name = "TABLE_NM")
 private String tablename;
 @Column(name = "COLUMN_NM")
 private String columnname;

 @OneToMany(fetch = FetchType.LAZY)
 @Cascade(CascadeType.ALL)
 @JoinTable(name = "CONTROL_RULE_ATTRIB", joinColumns = {
  @JoinColumn(name = "CONTROL_RULE_ID", nullable = false, updatable = false)
 })
 private List < ControlRuleAttrib > controlRuleAttribs;
}

ControlRuleAttrib

@Table(name = "CONTROL_RULE_ATTRIB")
@Entity
public class ControlRuleAttrib {
 @EmbeddedId
 private ControlRuleAttribPK controlRuleAttribPK;

 @Column(name = "ATTRIBUTE_VALUE")
 private String attributeValue;
}

ControleRuleAttribPK Frage hier ist, ist es möglich, Entity irgendwie zu bekommenControlRuleAttribType vonControlRuleAttrib? Wie Sie unten sehen könnenControlRuleAttribTypeId ist die ID vonControleRuleAttribType. Ich möchte ein ganzes Objekt und eine ganze Zahl erhalten.

@Embeddable
public class ControlRuleAttribPK implements Serializable {
 @Column(name = "CONTROL_RULE_ID")
 private Long controlRuleId;

 @Column(name = "ATTRIBUTE_SEQ_NUM")
 private Integer attributeSeqNum;

 @Column(name = "CONTROL_RULE_ATTRIB_TYPE_ID")
 private Integer controlRuleAttribTypeId;
}

ControleRuleAttribType

@Entity
@Table(name = "CONTROL_RULE_ATTRIB_TYPE")
public class ControlRuleAttribType implements Serializable {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @Column(name = "CONTROL_RULE_ATTRIB_TYPE_ID")
 private Integer id;
 @Column(name = "CONTROL_RULE_ATTRIB_TYPE_NM")
 private String typename;
 @Column(name = "CONTROL_RULE_ATTRIB_TYPE_DESC")
 private String typedesc;

 @ManyToOne(fetch = FetchType.LAZY)
 @Cascade(CascadeType.ALL)
 @JoinColumn(name = "CONTROL_RULE_TYPE_ID")
 @ForeignKey(name = "CONTROL_RULE_TYPE_ID")
 private ControlRuleType controlruletype;
}

ControleRuleType

@Entity
@Table(name = "CONTROL_RULE_TYPE")
public class ControlRuleType implements Serializable {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @Column(name = "CONTROL_RULE_TYPE_ID")
 private Integer id;
 @Column(name = "CONTROL_RULE_TYPE_NM")
 private String typename;
 @Column(name = "CONTROL_RULE_TYPE_DESC")
 private String typedesc;
}

BEARBEITEN

Hier ist Stacktrace:

https://gist.github.com/a30dd9ce534d96bb9a97

Wie Sie herausfinden werden, schlägt dies hier fehl:

at com.execon.controllers.main.MainPageController.getMainPage (MainPageController.java:33) [classes:]

Und das ist es:

List<ControlRule> list = SessionFactoryUtils.openSession(
    sessionFactory ).createQuery( "from ControlRule" ).list();
System.out.println( list );

jedes objekt welches mapping ich hinzugefügt habe, hattoString() Methode wie folgt deklariert:

@Override
public String toString()
{
    String s = "ControlRule{";
    s += "id=" + id.toString();
    s += ", controlRuleType=" + controlRuleType;
    s += ", jobname='" + jobname + '\'';
    s += ", libraryname='" + libraryname + '\'';
    s += ", tablename='" + tablename + '\'';
    s += ", columnname='" + columnname + '\'';
    s += ", controlRuleAttribs=" + controlRuleAttribs;
    s += '}';
    return s;
}

Und Ruhezustand anfordern:

https://gist.github.com/c8584113522757a4e0d8/4f31dc03e7e842eef693fa7ba928e19d27b3ca26

Hilfe bitte :)

BEARBEITEN 2

Nachdem ich @Jens Antwort gelesen hatte, habe ich einige Änderungen im Code vorgenommen. Zuerst habe ich getan, was du geschrieben hast und es gab Fehler:

org.hibernate.AnnotationException: Ein Fremdschlüssel, der auf com.execon.models.controlrules.ControlRuleAttrib aus com.execon.models.controlrules.ControlRule verweist, weist die falsche Spaltenanzahl auf. sollte 3 sein

Ich denke, das ist richtig, da ich zusammengesetzten Primärschlüssel habe.

Dann habe ich es so versucht:

@OneToMany(fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
@JoinTable(name = "CONTROL_RULE_ATTRIB",
        joinColumns = {
                @JoinColumn(name = "CONTROL_RULE_ID", nullable = false, updatable = false)
        },
        inverseJoinColumns = {
                @JoinColumn(name = "CONTROL_RULE_ID", nullable = false, updatable = false),
                @JoinColumn(name = "CONTROL_RULE_ATTRIB_TYPE_ID", nullable = false, updatable = false),
                @JoinColumn(name = "ATTRIBUTE_SEQ_NUM", nullable = false, updatable = false)
        })
private List<ControlRuleAttrib> controlRuleAttribs;

Ganz in der Nähe, aber es gibt mir die folgende Ausnahme:

Wiederholte Spalte in der Zuordnung für die Sammlung.

Also habe ich endlich entfernt

joinColumns = 
{
    @JoinColumn(name = "CONTROL_RULE_ID", nullable = false, updatable = false)
}

Und alles kompiliert, außer dass, wenn ich versuche, die Sammlung zu erreichen, Hibernate folgende Abfrage ausführt:

https://gist.github.com/c88684392f0b7a62bea5

Die letzte Zeile istcontrolrul0_.CONTROL_RULE_CONTROL_RULE_ID=? während es sein solltecontrolrul0_.CONTROL_RULE_ID=?.

Kann ich es trotzdem zum Laufen bringen? : /

Antworten auf die Frage(3)

Ihre Antwort auf die Frage