我有以下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(并进行适当的操作)。它总是作为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"); }
}
这是我得到的:
manyToOne = false oneToOne =假
在调试器中,“ oneToOne”的类型为ManyToOneType!我做错了还是这是hibernate缺陷?
编辑:这是OneToOne的工作方式。让我们创建三个SampleBeans(SB1,SB2,SB3),如下面的注释所述。首先,以POJO形式的数据:
SB1.oneToOne = SB2 SB2.oneToOne = SB3 SB3.oneToOne =空
再次以数据库形式提供数据:
ID | OneToOneID 1 | 2 2 | 3 3 |空
只要OneToOneID具有唯一约束,这种关系类型就是OneToOne吗?还有另一种方法来建模OneToOne吗?请注意,上面的POJO是单向的OneToOne。这可能是问题吗?
现在,这要清楚得多,谢谢。
确实是SampleBean1在两种情况下(例如实体本身和OneToOne映射的属性)还是错别字?如果它们相同,我很确定这是非法的(您如何认为映射会起作用)?我有点惊讶它被悄悄降级为“多对一”而不是抛出错误,但是也许这就是Hibernate Annotations映射器所做的。
SampleBean1