这似乎很普通,但是作为JPA新手,我很难弄清楚这一点。我正在使用EclipseLink和PostgreSQL,但这应该只与JPA规范有关。
我有一个表PRIMARY
,它具有一个ID,然后有一堆其他列。还有另一个表SECONDARY
,它在PRIMARY
表中也有一个外键,也称为ID
。该SECONDARY
表具有该ID
和代表区域设置的varchar的复合键。
因此,在Primary
实体中,我想要一个类型为Map<String, Secondary>
的字段,其中键是SECONDARY
表中的语言环境字符串,而条目是Secondary
实体。我的Secondary
类如下所示:
@Entity
public class Secondary
{
@Id
private Long id;
@Id
private String locale;
private String str1;
private String str2;
.....
}
我以为我想使用@MapKeyJoinColumn
注释,但似乎无法使其他注释正常工作。我尝试了这个:
@OneToMany
@JoinColumn(name="ID")
@MapKeyJoinColumn(name="LOCALE")
private Map<String, Secondary> secondaryByLocale;
这导致它试图选择一个不存在的名为secondaryByLocale_key的列。
然后我尝试了这个:
@OneToMany
@JoinTable(name="SECONDARY",
joinColumns={@JoinColumn(name="ID")},
inverseJoinColumns=@JoinColumn(name="ID"))
@MapKeyJoinColumn(name="LOCALE")
private Map<String, Secondary> secondaryByLocale;
这将导致以下错误:
Exception Description: The @JoinColumns on the annotated element [field secondaryByLocale] from the entity class [class com.foo.Primary] is incomplete. When the source entity class uses a composite primary key, a @JoinColumn must be specified for each join column using the @JoinColumns. Both the name and the referencedColumnName elements must be specified in each such @JoinColumn.
我尝试将referencedColumnName添加到注释中(我不确定它应该是什么),但是我遇到了同样的错误。
根据建议,我尝试使用@MapKey
,如下所示:
@OneToMany
@JoinColumn(name="ID")
@MapKey(name="LOCALE")
private Map<String, Secondary> secondaryByLocale;
这将导致以下错误:
Exception Description: The map key [LOCALE] on the entity class [class com.foo.Secondary] could not be found for the mapping [org.eclipse.persistence.mappings.UnidirectionalOneToManyMapping[secondaryByLocale]].
也许我要解决所有这些错误,并且有一种更好的方法来注释“地图”字段。任何帮助将非常感激。
参考方案
尝试改用@MapKey(name = "locale")
。
当您的地图关键字是一个实体时,将使用@MapKeyJoinColumn
,但此处您仅使用语言环境字符串。
我正在使用从C#应用程序调用的JAVA JPA API。 C#-> JAVA API调用方法由OpenAPI-generator生成。我使用Oauth2进行身份验证。调用我获得访问令牌后,C#-> Oauth2似乎工作正常,但是在发送GET请求(或任何其他需要身份验证的请求)时,出现错误“需要完全身份验证才能访问此资源”。邮递员-> Oau…
将自己的方法应用于h2 - java我已经开始学习Spring,并且正在尝试将电影的标题,类型,年份和演员数据存储在数据库(h2)中。如何使用我自己的代码中的方法从该数据库中获取数据,以使用system.out.println()在控制台中将其打印出来?我有Movie和Actor的类及其相应的属性,都用@Entity批注标记。接下来,我有一个扩展JpaRepository的接口(我知道有找到所…
JPA:回滚后刷新分离的实体并重新附加它 - java我有一个方法可以接收JPA Entity及其相关的EntityManager作为参数。 Entity实例不是在类内部创建的,它很可能与其他类(如GUI等)共享。该方法启动事务,对实体进行一些更改,最后提交事务。万一提交失败,将调用EntityTransaction.rollback():根据JPA规范,然后将实体与管理器分离。万一发生故障,应用程序需要丢弃待…
从实体获取或创建插入语句 - java是否存在具有值的现有实体类生成插入语句的可能性?编辑:我的意思是为实体类的实例生成一个插入语句,以单独执行该语句。提前致谢 java大神给出的解决方案 使用Fastnate,您可以为没有连接数据库的实体创建SQL语句:public String createSQL() { // Create your entity TestEntity entity = n…
如何将HQL中的引用实体强制转换为其子类 - java假设存在以下实体(未编写JPA注释):class Questionnaire { ... } class Policy { private Questionnaire questionnaire; ... } class LifeQuestionnaire extends Questionnaire { private String someField; }…