需要帮助来在某些对象之间创建一个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
在那里获取外键并不难。它只能从一个表链接到另一个表具有相同值的值。 我可能只是太傻了。
我感到绝望和沮丧,请有人帮助我。
有人可以向我解释如何做这样的事情。