使用 JPA 注释映射地图集合

发布于 2024-10-06 10:09:12 字数 1027 浏览 0 评论 0原文

嗨,大家好 我正在使用 hibernate 将应用程序从 xml 迁移到 JPA 注释。 目前,我一直坚持使用注释来映射具有复合 ID 的对象地图 这就是我尝试做的事情。



class A
{
  ...
  @OneToMany()
  @JoinColumn(name="A_ID")
  /*   B_ID should be the key in this map */
  private Map map = new HashMap();
}

class B
{
  @EmbeddedId
  private CompoundId id;
}

@Embeddable
class CompoundId
{
  @Column(name = "A_ID")
  String aId;

  @Column(name = "B_ID")
  long bId
}

我也尝试

@OneToMany()
@JoinColumn(name="A_ID", insertable=false, updatable=false)
@MapKeyColumn(name="B_ID")
private Map map = new HashMap();

Caused by: java.sql.SQLException: ORA-00904: "B1_"."ID": invalid identifier             

但没有成功

过映射 XML,

<map name="map" inverse="true" cascade="all-delete-orphan" lazy="false">
<key>
    <column name="A_ID" />
</key>

<map-key type="long" column="B_ID"/>
<one-to-many class="B" />
</map>

,它看起来像hibernate 3.2.7.ga 和注释 3.4.0.GA

thx!

Hi guys
I am migrating an application using hibernate from xml to JPA annotations.
Currently I am stuck on mapping a map of objects with compound id using annotations
This is how am trying to do it.



class A
{
  ...
  @OneToMany()
  @JoinColumn(name="A_ID")
  /*   B_ID should be the key in this map */
  private Map map = new HashMap();
}

class B
{
  @EmbeddedId
  private CompoundId id;
}

@Embeddable
class CompoundId
{
  @Column(name = "A_ID")
  String aId;

  @Column(name = "B_ID")
  long bId
}

I have also tried

@OneToMany()
@JoinColumn(name="A_ID", insertable=false, updatable=false)
@MapKeyColumn(name="B_ID")
private Map map = new HashMap();

Caused by: java.sql.SQLException: ORA-00904: "B1_"."ID": invalid identifier             

with no luck

in mapping XML it looks like this

<map name="map" inverse="true" cascade="all-delete-orphan" lazy="false">
<key>
    <column name="A_ID" />
</key>

<map-key type="long" column="B_ID"/>
<one-to-many class="B" />
</map>

hibernate 3.2.7.ga and annotations 3.4.0.GA

thx !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

饮惑 2024-10-13 10:09:12

尝试一下:

@Entity
public class A {
    @Id private String id;

    @OneToMany()
    @MapKeyColumn(name="B_ID")
    private Map<String, Long> associatedBs;
    // ...
}

我可能会遗漏一些东西,但 @MapKeyColumn 是重要的部分。我之前已经成功完成此操作,但我的代码在办公室,所以我无法仔细检查它。

Give this a try:

@Entity
public class A {
    @Id private String id;

    @OneToMany()
    @MapKeyColumn(name="B_ID")
    private Map<String, Long> associatedBs;
    // ...
}

I might be missing something, but the @MapKeyColumn is the important part. I have done this successfully before but my code is at the office so I can't double check it.

贪恋 2024-10-13 10:09:12
@OneToMany()
@JoinColumn(name="A_ID", insertable=false, updatable=false)
@MapKeyColumn(name="B_ID")
private Map map = new HashMap();

确实有效,问题似乎出在 B 类的复合 id 的映射中

干杯

@OneToMany()
@JoinColumn(name="A_ID", insertable=false, updatable=false)
@MapKeyColumn(name="B_ID")
private Map map = new HashMap();

did work, the problem appeared to be in mapping of composite id of B class

Cheers

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文