与Hibernate Mapping相对较新,我试图在Post和Comentario类之间实现这一功能而没有运气
import os
import sys
import subprocess
import getopt
from humanize import naturalsize
def get_size(start_path='.'):
# Might was to check validity of path here...
#if not (os.path.exists(start_path) and os.path.isdir(start_path)):
# raise ValueError('Invalid path argument: {!r}'.format(start_path))
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
return total_size
def get_immediate_subdirectories(a_dir):
return [name for name in os.listdir(a_dir)
if os.path.isdir(os.path.join(a_dir, name))]
def version():
print("Version: 1.0")
def usage():
print("Usage: disk_usage.py [-a|--all][-n|--ncdu][-v|--version][directory name]")
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "ad:hnv",
["all", "directory=", "help", "ncdu", "version",])
except getopt.GetoptError as err:
print(err)
usage()
if __name__ == '__main__':
return 2 # Unit test.
else:
sys.exit(2)
for opt, arg in opts:
if opt in ("-a", "--all"):
for subdir in get_immediate_subdirectories('.'):
print("%s\t\t %s" % (naturalsize(get_size(subdir)), subdir))
sys.exit()
elif opt in ("-d", "--directory"):
print(naturalsize(get_size(start_path=arg)))
elif opt in ("-v", "--version"):
print(version())
sys.exit()
elif opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-n", "--ncdu"):
os.system('ncdu')
sys.exit()
else:
print(usage())
else:
print(usage())
if __name__ == '__main__':
# Unit test.
sys.argv = ['disk_usage.py'] # no option given
main()
sys.argv = 'disk_usage.py -d.'.split() # short opt
main()
sys.argv = 'disk_usage.py -dsome_folder'.split() # short opt
main()
sys.argv = 'disk_usage.py -d some_folder'.split() # short opt
main()
sys.argv = 'disk_usage.py --directory some_folder'.split() # long opt
main()
sys.argv = 'disk_usage.py -d'.split() # Missing argument error
main()
没有映射comentario及其在Post中的字段工作正常,但是当我决定映射它时,出现此错误 在@MapsId映射中找不到列引用:idUsuario
是否没有在Comentario表中找到idUsuario列?我不想添加它,我可以在mysql中实现联接,但是我不知道如何在Hibernate中实现它
答案 0 :(得分:0)
@MapsId
批注用于将父实体的主键字段与子实体(具有相同名称)映射。
在您的情况下,您在父实体中具有复合主键,但是在子实体中,您只想引用它的一个字段。
PostPK
有两个字段:idPost
和idUsuario
。但是在Comentario
类中,当您指定ManyToOne关系时,您提到的是@JoinColumn
中的一列(即idPost),并且映射中没有idUsuario
的字段。但是根据@MapsId
注释的行为,idPost
类中的两个字段(idUsuario
和Comentario
)都是预期的。
因此,在您的情况下,@MapsId
注释将无效