如何在包含Embedded

时间:2019-11-18 15:46:21

标签: jpa mapping jpa-2.0

需要帮助来在某些对象之间创建一个foregKney。 声音很简单,也许吧,不知道为什么不起作用。

我不确定是否会有所作为,但我是通过SpringLoader并因此在Spring中运行的。

我有3个实体。其中的Alle 3具有相同的基本嵌入密钥,其中包含一些其他实体。 为了使结构简单易懂,我们说: @Embeddable {Coord1,Coord2,Coord3,Coord4} = CoordKey

Ent:MyObject

@EmbeddedId{    
    @Embedded CoordKey keys;            
    long gid;       
}

some other entity properties

ENT:事件

@EmbeddedId{        
    @Embedded CoordKey keys;            
    long event_id;
}

some other entity properties

在此切片中,CoordKey在MyObject和Event之间将始终相同。

现在,我尝试创建第三个实体,该实体既包含两个实体,又彼此链接,并具有自己的属性。 多个事件只能有一个MyObject(N:1,@ ManyToOne)

我可以这样做

@EmbeddedId{
        MyObject object:
        Event event;
    }   

some other entity properties

但是,问题在于,现在我已经复制了基本的嵌入密钥[1-4]

表的外观

PK = {
object_coord_key1
object_coord_key2
object_coord_key3
object_coord_key4
object_gid;
event_coord_key1
event_coord_key2
event_coord_key3
event_coord_key4
event_id;   
}
some propertiy columns

现在我可以在所有键之间的事件和MyObject之间建立N:M关系。

我需要的目标表是

PK = {
coord_key1
coord_key2
coord_key3
coord_key4
object_gid
event_id
}

因此,下一次尝试是

Ent:预订

@EmbeddedId{    
Event event
object_gid
}

some properties ...

当然不是最好的方法,但是会起作用。

表看起来像

PK = {
coord_key1
coord_key2
coord_key3
coord_key4
event_id
object_gid
}

some property columns

看起来不错,但是...对于MyObject,我没有让他的属性object_gid使用ForeignKey来工作。

当然,我可以在DataBase上定义foreigKey,这可能要简单得多,但不会这样做。 我想在实体内部进行定义。这样我们就可以通过jpa轻松创建整个数据库,而无需执行一些手动步骤。

我也考虑过这样做,但是我也不能这样做:

Ent:预订

@EmbeddedId{    
    CoordKey keys;      
    long event_id;
}
long object_gid;

但是在这里,我在事件和事件之间,创建的对象和对象之间以及功能上都没有任何外键。 Ent:预订

ForeigKeys:Event{
    CoordKey1   : Event:CoordKey11
    CoordKey2   : Event:CoordKey12
    CoordKey3   : Event:CoordKey13
    CoordKey4   : Event:CoordKey14
    eventid     : Event:event_id
    }
    ForeignKeys:MyObject{   
    CoordKey1   : MyObject:CoordKey11
    CoordKey2   : MyObject:CoordKey12
    CoordKey3   : MyObject:CoordKey13
    CoordKey4   : MyObject:CoordKey14
    object_gid  : MyObject:object_gid
    }

我尝试设置ForeignKey和JoinColumn定义,但是不起作用。 我尝试使用table =“ tableEntB”,referencedColumnName =“ entBKey1Column” =>找不到表 试图用targetEntity = MyObject.class =>给@ManyToOne加上注释 外键在表上创建正确,但是当我尝试保留数据时:

Error accessing field [private long <package>.MyObject.object_gid] by reflection for persistent property [<package>.MyObject#object_gid] : 1
    Caused by: java.lang.IllegalArgumentException: Can not set long field <Package>.MyObject.object_gid to java.lang.Long

在那里获取外键并不难。它只能从一个表链接到另一个表具有相同值的值。 我可能只是太傻了。

我感到绝望和沮丧,请有人帮助我。

有人可以向我解释如何做这样的事情。

0 个答案:

没有答案