Frage

Ich habe folgendes POJO:


public class SampleBean1 {
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    protected String id;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="OneToOneID")
    protected SampleBean1 oneToOne;

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @JoinColumn(name="OneToManyID")
    protected List<SampleBean1> oneToMany;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="ManyToOneID")
    protected SampleBean1 manyToOne; 

    @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    @JoinTable(name="SampleBeanManyToMany",
            joinColumns={@JoinColumn(name="LeftID")},
            inverseJoinColumns={@JoinColumn(name="RightID")})
    @IndexColumn(name="ManyToManyIndex")
    protected List<SampleBean1> manyToMany;

    ...
}

Ich mache eine Bibliothek OneToOne oder ManyToOne (und tun geeignete Operationen) zu erfassen. Es kommt immer wieder als ManyToOne.

//Get the class' metadata
ClassMetadata cmd=sf.getClassMetadata(o.getClass());

for(String propertyName:cmd.getPropertyNames()){ org.hibernate.type.Type propertyType=cmd.getPropertyType(propertyName);

//Handle ___ToOne
if (propertyType.isEntityType()){
    EntityType et=(EntityType)propertyType;
    System.out.printf("%s=%s\n",propertyName,et.isOneToOne()?"true":"false");
}

}

Hier ist, was ich zurück:

manyToOne=false
oneToOne=false

In der Debugger die Art des "OneToOne" ist ManyToOneType !! Habe ich etwas falsch gemacht oder ist dies ein Hibernate Defekt?

EDIT: Hier ist, wie die Dose Arbeit OneToOne. Lassen Sie uns erstellen drei SampleBeans (SB1, SB2, SB3), wie unten in einem Kommentar beschrieben. Zuerst werden die Daten in POJO Form:

SB1.oneToOne=SB2
SB2.oneToOne=SB3
SB3.oneToOne=null

Auch hier sind die Daten in der Datenbank Form:

ID|OneToOneID
1|2
2|3
3|null

Solange OneToOneID eine eindeutige Einschränkung hat, würde diese Art von Beziehung OneToOne sein? Gibt es eine andere Art und Weise OneToOne zu modellieren? Beachten Sie, dass die POJO oben ist unidirektional OneToOne vorgesehen. Könnte sein, dass das Problem sein?

War es hilfreich?

Lösung

Das ist jetzt viel klarer, danke.

Ist es wirklich in beiden Fällen SampleBean1 (zum Beispiel Unternehmen selbst und die OneToOne abgebildet Eigenschaft) oder ist es ein Tippfehler? Wenn sie gleich sind, bin ich ziemlich sicher, dass es illegal ist (wie stellst du dir das Mapping funktionieren würde)? Ich bin ein bisschen überrascht es ruhig zu „many-to-one“ degradiert, anstatt einen Fehler zu werfen, aber vielleicht das ist, was Hibernate Annotations Mapper der Fall ist.

Andere Tipps

Mehr eine Möglichkeit,

        if (propertyType.isEntityType()) {
            EntityType entityType = (EntityType) propertyType;

            if (entityType instanceof ManyToOneType) {
                System.out.println("this is ManyToOne");
            } else if(entityType instanceof OneToOneType) {
                System.out.println("this is OneToOne");
            }
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top