当我执行以下命令时:
ALTER TABLE `mytable` ADD UNIQUE (
`column1` ,
`column2`
);
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
#1071 - Specified key was too long; max key length is 767 bytes
Run Code Online (Sandbox Code Playgroud)
有关column1和column2的信息:
column1 varchar(20) utf8_general_ci
column2 varchar(500) utf8_general_ci
Run Code Online (Sandbox Code Playgroud)
我认为varchar(20)只需要21个字节,而varchar(500)只需要501个字节.所以总字节数是522,小于767.那么为什么我会得到错误信息呢?
#1071 - Specified key was too long; max key length is 767 bytes
Run Code Online (Sandbox Code Playgroud) 使用注释如何将实体中的字段映射到给定对象的字符串"Map"(Hashtable)?该对象已注释,其实例已存储在hibernate数据库中.
我已经找到了使用简单的键和值来定义地图的语法:
<class name="Foo" table="foo">
...
<map role="ages">
<key column="id"/>
<index column="name" type="string"/>
<element column="age" type="string"/>
</map>
</class>
Run Code Online (Sandbox Code Playgroud)
奇怪的是,一个实体作为键,一个简单类型作为值,如下所示:
<class name="Foo" table="foo">
...
<map role="ages">
<key column="id"/>
<index-many-to-many column="person_id"
class="Person"/>
<element column="age" type="string"/>
</map>
</class>
<class name="Person" table="person">
...
<property name="name" column="name"
type="string"/>
</class>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何为元素映射的简单键做到这一点,我不知道如何使用注释来做到这一点.
似乎我看到的每个地方都有过时的版本,不再适用.我的问题似乎很简单.我有一个Java类,它映射到derby数据库.我正在使用注释,并成功设法在我的数据库中创建所有其他表,但是在这个具体的例子中,我只需要一个不使用任何其他类的Map,只需要两个简单的字符串值.我尝试过在网上找到的所有内容时遇到了各种类型的错误.
有没有人知道这样做的简单方法,而不使用弃用的注释?
提前致谢!
使用 JPA 我意识到我有动态增长的实体,即实体的属性数量可能会有所不同。知道有一些基于键值表的解决方案,我有兴趣了解有关如何将该技术应用于 JPA (JPQL) 的更多信息。
示例结构如下所示:
REF-ID KEY VALUE
1000 name foo
1000 category basic
1001 name bar
1001 category advanced
1001 descr none
--------------------|------------
PRIMARY |
Run Code Online (Sandbox Code Playgroud)
问题是,这种表可能会大幅增长,多达数百万条记录。下一个问题是如何映射查询,例如
SELECT name, category, descr
FROM KEYSTORE
WHERE id=1000;
Run Code Online (Sandbox Code Playgroud)
... descr 可能可用或不可用的地方
在使用 JPA 时,我是否在这里缺少任何概念来满足此要求,或者我是否必须在此处使用其他技术?性能呢?