Java 重写基本类型映射的映射

Java 重写基本类型映射的映射,java,annotations,jpa-2.0,Java,Annotations,Jpa 2.0,我正在为我的实习准备一个JPA2.0合规工具包。。。该套件的一部分是测试角盒 JSR-317在第360页上指出,“属性覆盖注释可应用于包含可嵌入类实例的元素集合或键和/或值为可嵌入类的地图集合。” 那么,根据JPA2.0,我如何覆盖基本类型的映射呢?我知道我可以使用@MapKeyColumn来映射映射的键,而且我确信也有某种方法来映射@CollectionTable的值端 但我该如何去覆盖这些呢 考虑一个带有映射的@embeddeble @CollectionTable @MapKeyColum

我正在为我的实习准备一个JPA2.0合规工具包。。。该套件的一部分是测试角盒

JSR-317在第360页上指出,“属性覆盖注释可应用于包含可嵌入类实例的元素集合或键和/或值为可嵌入类的地图集合。”

那么,根据JPA2.0,我如何覆盖基本类型的映射呢?我知道我可以使用@MapKeyColumn来映射映射的键,而且我确信也有某种方法来映射@CollectionTable的值端

但我该如何去覆盖这些呢

考虑一个带有映射的@embeddeble

@CollectionTable
@MapKeyColumn(name="differentname_KEY")
Map<Integer, String> testMap;
@CollectionTable
@MapKeyColumn(name=“differentname\u KEY”)
地图测试地图;
我将如何覆盖键和值?我是使用@AttributeOverride还是其他什么?(还是不可能?!)

我在这里假设这样一个映射会被@CollectionTable映射,所以如果我错了,请纠正我。 如果JPA没有给出答案,我想知道持久性提供者是如何解决这个问题的

编辑: Viruzzo评论说,基本类型是可嵌入类型。 我愿意接受这一点,但有件事阻碍了我:
JSR-317指的是一个可嵌入类(见上引号)。类型和类不一样…

首先作为旁注:示例中的映射甚至不应该编译。原因是int是基元类型,
java.util.Collection
Collection和map接口和实现仅用于引用类型

让我们使用以下示例:

SomeEntity {
  @Id private int id;
  @ElementCollection
  private Map<Integer, String> testmap; 
}
@AttributeOverride在这里没有用处,因为没有可嵌入的键或值。它用于重写从别处派生的映射,而不是重写ElementCollection的默认值。它有两种用途:

  • 重写从映射的超类或 从嵌入类派生
  • 重写从以下可嵌入类派生的属性映射: 用作元素集合中的键或值

基本类型可嵌入;我会说这只是一个糟糕的词语选择。如果你加上这个作为回答,我可以接受。。。你确定没有区别吗?在深度上与我所看到的有所不同:在可嵌入的情况下,它将是
@AttributeOverride(name=“embeddeble.testMap.key.attribute”[列省略])
,在基本类型的情况下,它将是
@AttributeOverride(name=“embeddeble.testMap.key”[列省略])
@MapKeyClass还声明“映射键可以是基本类型、可嵌入类或实体。”,进一步支持可嵌入类型与可嵌入类不同。我没有说它们是相同的,只是基本类型是可嵌入的(不是可嵌入类);简单地说,可嵌入类是传递给JPA时合并到容器类中的类,JPA是本机的(并且是唯一的)基本类型的行为。好的,…这如何回答这个问题?我理解它有困难。修复了编译错误,谢谢。我明天上班时会更详细地研究这个问题…我发现
@AttributeOverride
不能在这里使用-将使用什么?用于什么,你能给出函数的示例吗您错过了什么?在我给出的示例中,有三列,所有列的默认名称都被覆盖(@JoinColumn,MapKeyColumn,@column)。映射如何在某个实体的类之外被覆盖(例如@AttributeOverride如何工作-从类B覆盖类a中的映射)很可能无法做到这一点。
@ElementCollection
@CollectionTable(name = "testmap_table", 
                 joinColumns = @JoinColumn(name = "join_column"))
@MapKeyColumn(name = "key_column")
@Column(name= "value_column")
private Map<Integer, String> testMap;