我有以下 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;
...
}
我正在制作一个库来检测 OneToOne 或 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"); }
}
这是我回来的:
多对一=假 oneToOne=false
在调试器中,“oneToOne”的类型是 ManyToOneType!!我做错了什么还是这是休眠缺陷?
编辑:这是 OneToOne 的工作方式。让我们创建三个 SampleBeans(SB1、SB2、SB3),如下面的评论中所述。一、POJO形式的数据:
SB1.oneToOne=SB2 SB2.oneToOne=SB3 SB3.oneToOne=null
再次以数据库形式的数据:
ID|OneToOneID 1|2 2|3 3|空
只要 OneToOneID 具有唯一约束,这种类型的关系会是 OneToOne 吗?是否有另一种方法来建模 OneToOne?请注意,上面的 POJO 是单向 OneToOne。这可能是问题吗?