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