我的JPA实体有一个地图,其中key - 另一个实体,值 - 布尔类型。 它被定义为:
@ElementCollection
@CollectionTable(name = "join_table_name",
joinColumns = {@JoinColumn(name ="owner_entity_key_name") })
@MapKeyColumn(name = "other_entity_key_name")
@Column(name = "name_for_boolean")
private Map<OtherEntity, Boolean> map;
所有者实体(定义了地图)和另一个实体(用作地图中的关键字)都有@Id Integer id;
字段。
在集成测试中,jpa提供程序使用以下create table查询:
create table join_table_name (
owner_entity_key_name integer not null,
name_for_boolean boolean,
other_entity_key_name binary(255) not null,
primary key (owner_entity_key_name, name_for_boolean))
正如您所见,other_entity_key_name
的类型是binary(255)
,而不是integer
。
为什么它以这种方式运作的任何想法?
JPA提供者:
Hibernate Core {4.1.6.Final}
PS:
我已经使用columnDefinition = "integer"
明确设置了类型,但问题仍然存在,因为它不是最佳选择,我希望。
PPS:现在,当实体之间的连接被刷新时,我得到一个例外:
引起:org.h2.jdbc.JdbcSQLException:数据转换错误 转换 “X'aced00057372003a636f6d2e6272616e646d616b65722e6d6d732e646f6d61696e2e636f6d6d6f6e2e5669727475616c4461746162617365456e746974794265616e00000000000000010200064c000269647400134c6a6176612f6c616e672f496e74656765723b4c00046e616d657400124c6a6176612f6c616e672f537472696e673b4c000d6e65656473417070726f76616c7400134c6a6176612f6c616e672f426f6f6c65616e3b4c00137365744469676974616c57617465726d61726b71007e00034c001273657456697375616c57617465726d61726b71007e00034c00197669727475616c4461746162617365546f564442474c6973747400104c6a6176612f7574696c2f4c6973743b7870737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b0200007870000000647400165649525455414c5f44425f4e414d452069643d313030737200116a6176612e6c616e672e426f6f6c65616ecd207280d59cfaee0200015a000576616c75657870007371007e000a0171007e000b7372002f6f72672e68696265726e6174652e636f6c6c656374696f6e2e696e7465726e616c2e50657273697374656e74426167464a645c192e1ec40200014c0003626167710 07e00047872003e6f72672e68696265726e6174652e636f6c6c656374696f6e2e696e7465726e616c2e416273747261637450657273697374656e74436f6c6c656374696f6e87cca6e4d54cc52d02000949000a63616368656453697a655a000564697274795a000b696e697469616c697a65645a000d737065636a4c617a794c6f61644c00036b65797400164c6a6176612f696f2f53657269616c697a61626c653b4c00056f776e65727400124c6a6176612f6c616e672f4f626a6563743b4c0004726f6c6571007e00024c001273657373696f6e466163746f72795575696471007e00024c000e73746f726564536e617073686f7471007e000f7870ffffffff00000071007e000871007e0005740054636f6d2e6272616e646d616b65722e6d6d732e646f6d61696e2e636f6d6d6f6e2e5669727475616c4461746162617365456e746974794265616e2e7669727475616c4461746162617365546f564442474c697374707070' (join_table_name:other_entity_key_name INTEGER NOT NULL)“;
由于某种原因而不是实体id,所以使用了它的表示。
答案 0 :(得分:0)
第一个问题是对第二个问题的暗示。
你需要使用@MapKeyJoinColumn而不是@MapKeyColumn。
http://docs.oracle.com/javaee/6/api/javax/persistence/MapKeyColumn.html
指定地图键为a的地图的键列的映射 基本类型
与
http://docs.oracle.com/javaee/6/api/javax/persistence/MapKeyJoinColumn.html
指定到作为地图键的实体的映射。