ManyToOneType je le POJO suivant:@OneToOne se retourne comme
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;
...
}
Je fais une bibliothèque pour détecter OneToOne ou ManyToOne (et faire des opérations appropriées). Il revient toujours comme 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"); }
}
Voici ce que je reviens:
manyToOne=false oneToOne=false
Dans le débogueur le type de la "ONEtoONE" est ManyToOneType !! Ai-je fait quelque chose de mal ou est-ce un défaut d'Hibernate?
EDIT: Voici comment les OneToOne peuvent fonctionner. Créons trois SampleBeans (SB1, SB2, SB3) comme décrit dans un commentaire ci-dessous. Tout d'abord, les données sous forme de POJO:
SB1.oneToOne=SB2 SB2.oneToOne=SB3 SB3.oneToOne=null
Encore une fois les données sous forme de base de données:
ID|OneToOneID 1|2 2|3 3|null
Tant que OneToOneID a une contrainte unique, serait ce type de relation est OneToOne? Existe-t-il un autre moyen de modéliser OneToOne? Notez que le POJO ci-dessus est destiné à OneToOne unidirectionnel. Cela pourrait-il être le problème?
SampleBean1 est mis en correspondance avec lui-même sur chaque relation. Je pensais que cela rendrait le test plus facile. Ne pouvez-vous pas avoir une relation OneToOne avec vous-même dans Hibernate? En SQL, vous pouvez simplement ajouter une clé étrangère et tout va bien. – User1
Donc disons que vous avez trois instances de SampleBean1 - SB1, SB2 et SB3. La propriété oneToOne de SB1 pointe vers SB2 PK. La propriété oneToOne de SB2 pointe vers SB3 PK. Maintenant, lequel "one" est SB2 one-to-one avec - SB1 ou SB3? :-) C'est pourquoi c'est illégal. – ChssPly76
Bien. Que faire si vous avez deux entités, A et B, avec des relations 1-à-1 les uns aux autres. Que faire si A1 et A2 pointent vers B1? Quel "un" est B1 one-to-one avec? Je suppose que si le point que vous avez proposé est illégal, ce n'est pas à cause de l'exemple que vous avez donné. –