Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @OneToOne作为多个OneType返回_Java_Hibernate_One To One - Fatal编程技术网

Java @OneToOne作为多个OneType返回

Java @OneToOne作为多个OneType返回,java,hibernate,one-to-one,Java,Hibernate,One To One,我有以下几点建议: public class SampleBean1 { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid") protected String id; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="OneToOn

我有以下几点建议:


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;

    ...
}
}

以下是我得到的反馈:

SB1.oneToOne=SB2 SB2.oneToOne=SB3 SB3.oneToOne=null 多通=假 oneToOne=错误 在调试器中,“oneToOne”的类型是ManyToOneType!!是我做错了什么,还是这是一个休眠缺陷

编辑:以下是OneTONE的工作原理。让我们创建三个SampleBean(SB1、SB2、SB3),如下面的注释所述。首先,POJO格式的数据:

ID|OneToOneID 1|2 2|3 3|null SB1.oneToOne=SB2 SB2.OneTONE=SB3 SB3.oneToOne=null 再次以数据库形式显示数据:

        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");
            }
        }
ID | OneToOneID 1|2 2|3 3 |零
只要OneToOneID有唯一的约束,这种类型的关系会是OneToOne吗?有没有其他方法来模拟OneTONE?注意,上面的POJO是单向的。这就是问题所在吗?

现在更清楚了,谢谢


在这两种情况下(例如实体本身和OneToOne映射属性),它真的是
SampleBean1
,还是打字错误?如果它们是相同的,我很确定这是非法的(你认为映射会如何工作)?我有点惊讶它被悄悄地降级为“多对一”,而不是抛出错误,但也许这就是Hibernate Annotations mapper所做的。

现在更清楚了,谢谢


在这两种情况下(例如实体本身和OneToOne映射属性),它真的是
SampleBean1
,还是打字错误?如果它们是相同的,我很确定这是非法的(你认为映射会如何工作)?我有点惊讶它被悄悄地降级为“多对一”,而不是抛出错误,但也许这就是Hibernate Annotations mapper所做的。

更多可能性


更有可能


SampleBean1映射到每个关系上的自身。我想这会让测试更容易。在冬眠状态下,你能不能和自己保持一种一对一的关系?在SQL中,您只需添加一个外键,一切正常。因此,假设您有三个SampleBean1-SB1、SB2和SB3实例。SB1的oneToOne属性指向SB2主键。SB2的oneToOne属性指向SB3主键。现在,SB2与-SB1或SB3一对一是哪一个“一”:)这就是为什么它是非法的。如果您有两个实体,A和B,它们之间有1对1的关系,该怎么办。如果A1和A2都指向B1怎么办?B1与哪个“一对一”匹配?我想如果你提出的观点是非法的,那不是因为你举的例子。@Andre-你的例子不是一对一的关系。它是从A到B的多对一或从B到A的一对多你可以随时检查实际的注释。您知道属性名称和类;使用反射获取字段和
get
方法(在两者之间进行选择可能会有问题;我建议您同时选中两者),然后在其上调用
setAccessible()
,然后调用
getAnnotation(OneToOne.class)
。如果后者不返回NULL,则将其标记为
OneToOne
。不过,我会对此保持谨慎——事实上,Hibernate悄悄地将非法的OneToOne“降级”为ManyToOne对我来说似乎相当不确定,这很可能在未来发生变化。SampleBean1在每个关系上都映射到自己。我想这会让测试更容易。在冬眠状态下,你能不能和自己保持一种一对一的关系?在SQL中,您只需添加一个外键,一切正常。因此,假设您有三个SampleBean1-SB1、SB2和SB3实例。SB1的oneToOne属性指向SB2主键。SB2的oneToOne属性指向SB3主键。现在,SB2与-SB1或SB3一对一是哪一个“一”:)这就是为什么它是非法的。如果您有两个实体,A和B,它们之间有1对1的关系,该怎么办。如果A1和A2都指向B1怎么办?B1与哪个“一对一”匹配?我想如果你提出的观点是非法的,那不是因为你举的例子。@Andre-你的例子不是一对一的关系。它是从A到B的多对一或从B到A的一对多你可以随时检查实际的注释。您知道属性名称和类;使用反射获取字段和
get
方法(在两者之间进行选择可能会有问题;我建议您同时选中两者),然后在其上调用
setAccessible()
,然后调用
getAnnotation(OneToOne.class)
。如果后者不返回NULL,则将其标记为
OneToOne
。不过,我会对此保持谨慎——事实上,Hibernate悄悄地将非法的OneToOne“降级”为ManyToOne对我来说似乎相当不确定,这很可能在未来发生变化。 ID|OneToOneID 1|2 2|3 3|null
        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");
            }
        }