与here类似,我用
注释我的班级git push heroku master
尝试创建具有@Table(indexes = {@Index(columnList = "name")})
列最大长度的非唯一索引。不幸的是,这是不可能的,因为它是varchar
类varchar(255)
列。 phpMyAdmin通过点击UI中的相应按钮添加了utf8mb4
,所以至少我的软件现在可以运行高效的查询。
现在我想知道在创建数据库模式时是否可以让我的Java类自动生成有限长度的索引?该代码构建于KEY '...' (name(191))
。
答案 0 :(得分:2)
除了试图让第三方软件做一些可能允许或不允许的事情之外,还有其他答案。
答案 1 :(得分:1)
您应该只使用JPA生成的表脚本作为起点,您绝不应该使用JPA在生产中创建表。
如果您具有“创建表”权限,那么您不需要DBA来创建和修改数据库,那么我建议您使用Flyway来管理数据库创建和迁移。 如果您需要与数据库无关,并且像长XML文件一样,您也可以使用LiquideBase 。
使用flyway,每次添加一个或多个实体时都会添加一个新脚本。我通常让JPA创建脚本,然后复制我需要的东西,也许做一些修改 - 例如#!/usr/bin/env python2
from functools import wraps
class CommandInfo(object):
cmds = []
def __init__(self, shortname, longname, func):
self.shortname = shortname
self.longname = longname
self.func = func
class CommandDispatch(object):
def __init__(self, shortname, longname):
self.shortname = shortname
self.longname = longname
def __call__(self, func):
print("hello from CommandDispatch's __call__")
@wraps(func)
def wrapped_func(wself, *args, **kwargs):
print('hello from wrapped_func, args:{0}, kwargs: {1}'.format(args, kwargs))
func(wself, *args, **kwargs)
ci = CommandInfo
ci.cmds += [ci(shortname=self.shortname, longname=self.longname, func=func)]
return wrapped_func
@staticmethod
def func(name):
print('hello from CommandDispatch.func')
for ci in CommandInfo.cmds:
if ci.shortname == name or ci.longname == name:
return ci.func
raise RuntimeError('unknown command')
@CommandDispatch(shortname='co', longname='commit')
def commit(msg):
print('commit msg: {}'.format(msg))
commit('sample commit msg') # Normal call by function name
cd = CommandDispatch
short_f = cd.func(name='co') # Call by shortname
short_f('short sample commit msg')
long_f = cd.func(name='commit') # Call by longname
long_f('long sample commit msg')
class A(object):
@CommandDispatch(shortname='Aa', longname='classAmethoda')
def a(self, msg):
print('A.a called, msg: {}'.format(msg))
a = A()
short_fA = cd.func(name='Aa')
short_fA(a, 'short A.a msg')
long_fA = cd.func(name='classAmethoda')
long_fA(a, 'short A.a msg')
在某些数据库上意味着255个字节,所以你可能想要修改它,如果你存储的不是拉丁语 - 1。
Flyway使用非常简单,并且完全集成到Spring启动中,因此您只需在第一个(或更晚的)飞路脚本varchar(255)
中按照您希望的方式添加唯一索引。