我可以在ODB中将const对象传递给db.persist吗?

吉姆特

我正在尝试ODB ORM,并且必须坚持使用接口,因此我需要获取一个const对象并将其持久化。我不确定ODB API是否允许持久保留const对象,因为某些部分似乎已经为此准备好了,但是它不起作用。

我在这里从gcc收到此错误:

void OdbReportRW::write_object(const MyObject &my_object)
{
    odb::core::transaction t{db->begin()};
    db->persist(my_object);
    t.commit();
}

这是错误,我认为它说my_object不应为const:

In file included from /usr/local/include/odb/database.hxx:632:0,
from odb_report.hpp:21,
from src/vcf/odb_report.cpp:18:
/usr/local/include/odb/database.txx: In instantiation of ‘typename odb::object_traits<T>::id_type odb::database::persist_(T&) [with T = const MyObject; odb::database_id DB = (odb::database_id)5u; typename odb::object_traits<T>::id_type = long unsigned int]’:
/usr/local/include/odb/database.ixx:167:45:   required from ‘typename odb::object_traits<T>::id_type odb::database::persist(const T&) [with T = MyObject; typename odb::object_traits<T>::id_type = long unsigned int]’
src/vcf/odb_report.cpp:134:26:   required from here
/usr/local/include/odb/database.txx:38:39: error: no matching function for call to ‘odb::object_traits_impl<MyObject, (odb::database_id)5u>::persist(odb::database&, const MyObject&)’
object_traits::persist (*this, obj);
^
/usr/local/include/odb/database.txx:38:39: note: candidate is:
In file included from src/vcf/odb_report.cpp:27:0:
my-object-error-odb.hxx:247:5: note: static void odb::access::object_traits_impl<MyObject, (odb::database_id)1u>::persist(odb::database&, odb::access::object_traits<MyObject>::object_type&)
persist (database&, object_type&);
^
my-object-odb.hxx:247:5: note:   no known conversion for argument 2 from ‘const MyObject’ to ‘odb::access::object_traits<MyObject>::object_type& {aka MyObject&}’

与c相同的错误,更具描述性:

In file included from src/vcf/odb_report.cpp:18:
In file included from inc/vcf/odb_report.hpp:21:
In file included from /usr/local/include/odb/database.hxx:632:
/usr/local/include/odb/database.txx:38:36: error: binding of reference to type 'object_type' (aka 'MyObject') to a value of type 'const MyObject' drops qualifiers
    object_traits::persist (*this, obj);
                                   ^~~
/usr/local/include/odb/database.ixx:167:12: note: in instantiation of function template specialization 'odb::database::persist_<const MyObject, 5>' requested here
    return persist_<const T, id_common> (obj);
           ^
src/vcf/odb_report.cpp:134:13: note: in instantiation of function template specialization 'odb::database::persist<MyObject>' requested here
        db->persist(my_object);
            ^
inc/vcf/error-odb.hxx:247:37: note: passing argument to parameter here
    persist (database&, object_type&);
                                    ^

但是,我可以在数据库界面(从odb中)看到,提供了两种持久性类型:引用和const引用(以及其他带指针的):

// in odb/database.hxx
template <typename T>
typename object_traits<T>::id_type
persist (T& object);

template <typename T>
typename object_traits<T>::id_type
persist (const T& object);

当类中没有要持久化的默认构造函数(此处为MyObject)时find我看到了类似的错误(对于,不是persist),但是它在那里,所以这不是问题。我已经检查过默认构造函数仅find在生成的代码中生成一个额外的方法

它可以删除我的write_object方法中的const说明符,但正如我所说,我必须坚持使用接口。

有什么想法可以保留const对象吗?

吉姆特

更彻底地阅读我发现的文档(http://www.codesynthesis.com/products/odb/doc/manual.xhtml#3.8):

第一个persist()函数期望对要持久存储的实例的常量引用。第二个函数需要一个恒定的对象指针。这两个函数只能在具有应用程序分配的对象ID的对象上使用(第14.4.2节“自动”)。

确实,我在使用auto指定符来处理数据库处理的ID:

// class MyObject    
#pragma db id auto
unsigned long id_;

因此,看来我不能同时使用自动ID和const引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以将字典对象传递给Restler吗?

来自分类Dev

我可以将两个对象传递给createPage中的上下文吗?

来自分类Dev

我可以将 Bool 作为环境对象传递给 SwiftUI 中的子视图吗?

来自分类Dev

我可以将const char *数组传递给execv吗?

来自分类Dev

C#静态类:我应该将对象传递给构造函数吗?

来自分类Dev

C#静态类:我应该将对象传递给构造函数吗?

来自分类Dev

在将获取的实体对象传递给树枝模板之前,我应该重新打包它吗?

来自分类Dev

我可以在python中将对象的属性隐式传递给它的其他属性之一吗

来自分类Dev

您可以使用ctypes通过对象的内存ID将对象传递给celery任务吗?

来自分类Dev

可以在Rails 4中将对象哈希传递给* _tag函数吗?

来自分类Dev

我可以将匿名对象传递到需要引用类型为object的参数的方法中吗?

来自分类Dev

我可以通过剪贴板将[可序列化]对象传递到Excel插件中吗?

来自分类Dev

我可以在异步任务中将参数传递给preExecute()方法吗?

来自分类Dev

我们可以在Java中将Url路径和文件名传递给FileOutputStream吗

来自分类Dev

我们可以在tcl 8.5中将选项传递给tcl source命令吗

来自分类Dev

我们可以在对象调用中将对象作为参数传递吗?

来自分类Dev

我们可以在对象调用中将对象作为参数传递吗?

来自分类Dev

我可以将对象作为参数传递给小部件吗

来自分类Dev

我可以在PHP中声明对象并将其传递给函数吗?

来自分类Dev

我可以将带有属性的对象文字传递给 Angular 模板中的子级吗?

来自分类Dev

我可以只通过一条路线来获取有关我的模型对象传递字符串或 json 对象的任何信息吗?

来自分类Dev

可以在C编程中将指针传递给scanf参数吗?

来自分类Dev

您可以在Vuejs中将参数传递给mixin吗?

来自分类Dev

我应该将对象属性传递给对象方法吗?

来自分类Dev

我可以在Swift中将参数传递给Singleton类吗?和一般的Singleton一起使用

来自分类Dev

我可以将NSWindow的引用传递给自定义对象,然后使用该对象添加NSButton和Action吗?

来自分类Dev

在火花流中,我必须在 cache() 或 persist() 之后调用 count() 来强制缓存/持久性真正发生吗?

来自分类Dev

我可以将块传递给Proc吗?

来自分类Dev

我可以将标题传递给图像源吗?

Related 相关文章

  1. 1

    我可以将字典对象传递给Restler吗?

  2. 2

    我可以将两个对象传递给createPage中的上下文吗?

  3. 3

    我可以将 Bool 作为环境对象传递给 SwiftUI 中的子视图吗?

  4. 4

    我可以将const char *数组传递给execv吗?

  5. 5

    C#静态类:我应该将对象传递给构造函数吗?

  6. 6

    C#静态类:我应该将对象传递给构造函数吗?

  7. 7

    在将获取的实体对象传递给树枝模板之前,我应该重新打包它吗?

  8. 8

    我可以在python中将对象的属性隐式传递给它的其他属性之一吗

  9. 9

    您可以使用ctypes通过对象的内存ID将对象传递给celery任务吗?

  10. 10

    可以在Rails 4中将对象哈希传递给* _tag函数吗?

  11. 11

    我可以将匿名对象传递到需要引用类型为object的参数的方法中吗?

  12. 12

    我可以通过剪贴板将[可序列化]对象传递到Excel插件中吗?

  13. 13

    我可以在异步任务中将参数传递给preExecute()方法吗?

  14. 14

    我们可以在Java中将Url路径和文件名传递给FileOutputStream吗

  15. 15

    我们可以在tcl 8.5中将选项传递给tcl source命令吗

  16. 16

    我们可以在对象调用中将对象作为参数传递吗?

  17. 17

    我们可以在对象调用中将对象作为参数传递吗?

  18. 18

    我可以将对象作为参数传递给小部件吗

  19. 19

    我可以在PHP中声明对象并将其传递给函数吗?

  20. 20

    我可以将带有属性的对象文字传递给 Angular 模板中的子级吗?

  21. 21

    我可以只通过一条路线来获取有关我的模型对象传递字符串或 json 对象的任何信息吗?

  22. 22

    可以在C编程中将指针传递给scanf参数吗?

  23. 23

    您可以在Vuejs中将参数传递给mixin吗?

  24. 24

    我应该将对象属性传递给对象方法吗?

  25. 25

    我可以在Swift中将参数传递给Singleton类吗?和一般的Singleton一起使用

  26. 26

    我可以将NSWindow的引用传递给自定义对象,然后使用该对象添加NSButton和Action吗?

  27. 27

    在火花流中,我必须在 cache() 或 persist() 之后调用 count() 来强制缓存/持久性真正发生吗?

  28. 28

    我可以将块传递给Proc吗?

  29. 29

    我可以将标题传递给图像源吗?

热门标签

归档