在我理解Mnesia的过程中,我仍然在用关系术语思考.因此,我将把我的斗争放在这里,并寻求解决它们的最佳方法.
一对多关系 说我有一群人,
-record(contact, {name, phone}).
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以将手机定义为总是保存为列表,因此人们可以拥有多个电话号码,我想这是做到这一点的方式(是吗?我怎么会这样看,反过来,比如,找一个数字的名字?).
多对多关系 现在让我们假设我有多个团体可以让人们进去.团体名称没有任何意义,它们只是名字; 这个概念是"unix系统组"或"标签".天真的,我会把这个会员资格建模为一个支持者,比如
{groups [{friends, bool()}, {family, bool()}, {work, bool()}]} %% and so on...
Run Code Online (Sandbox Code Playgroud)
例如,作为上面"联系"记录中的字段.如果我希望能够快速查找基于组名的组中的所有成员,并且还希望能够查找个人注册的所有组,那么在mnesia中对此进行建模的最佳方法是什么?当然,我也可以将其建模为仅包含组标识符的列表.与mnesia一起使用时,对此进行建模的最佳方法是什么?
如果这个问题愚蠢,我道歉.关于mnesia的文档很多,但它缺乏(IMO)一些很好的整体使用示例.
我已经在下面的答案中找到并编辑了.
我想在QtWebKit中将值从python代码返回到javascript上下文.到目前为止,我有一个这样的课程:
class Extensions(QtCore.QObject):
@QtCore.pyqtSlot()
def constant_one(self):
return 1;
# ... later, in code
e = Extensions();
def addextensions():
webview.page().mainFrame().addToJavaScriptWindowObject("extensions", e);
# ...
webview.connect(webview.page().mainFrame(), QtCore.SIGNAL("javaScriptWindowObjectCleared"), addextensions)
Run Code Online (Sandbox Code Playgroud)
我可以从Javascript中调用此函数,如下所示:
var a = extensions.constant_one();
Run Code Online (Sandbox Code Playgroud)
它确实被称为(我在那里用印刷品验证过); 但仍然最终未定义.为什么不从函数返回值?我也试过在QVariant中包装一个,但到目前为止还没有骰子.
编辑:我找到了答案.显然,QtWebKit需要结果类型作为提示.可以将它提供给pyqtSlot-Decorator,如下所示:
class Extensions(QtCore.QObject):
@QtCore.pyqtSlot(result="int")
def constant_one(self):
return 1;
Run Code Online (Sandbox Code Playgroud)
然后它正常工作.让这个开放另外两天,以防有人发现我应该做的其他事情.
我试过像这样配置一个域类:
class Test {
String data
static constraints = {
}
static mapping = {
data type: 'jsonb'
}
}
Run Code Online (Sandbox Code Playgroud)
这会引发异常(最终的原因是Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not determine type for: jsonb, at table: test, for columns: [org.hibernate.mapping.Column(data)])。
我也试过column: 'data', sqlType: 'jsonb',它会创建一个text名为data.
我如何正确地告诉 grailsjsonb用作 sql 列类型?有可能吗?
(postgresql jdbc 驱动程序用于 9.4-1200.jdbc4 和 hibernate 4。)