我目前正在研究OrientDB,用于评估图形数据库的版本控制功能。
OrientDB中的每条记录都有一个@version属性,每次更新记录时都会增加。这为版本控制支持提供了指示。我已经设置了一个简单的例子(使用OrientDB SQL)来测试它:
create class Product
create property Product.name string
create property Product.price integer
insert into Product (name, price) values ('Fridge', 449)
update Product set price = 479 where name = 'Fridge'
select from Product
执行上述语句后,我得到以下查询结果:
{
"result": [
{
"@type": "d",
"@rid": "#14:0",
"@version": 2,
"@class": "Product",
"name": "Fridge",
"price": 479
}
],
"notification": "Query executed in 0.031 sec. Returned 1 record(s)"
}
在此数据库状态下 - 如何检索记录的先前版本(在此简单情况下为版本1)?这是通过OrientDB SQL语句和/或通过OrientDB Java API实现的吗?如果不是 - 那么@version属性的目的是什么?
提前感谢您的帮助!
答案 0 :(得分:12)
@version
属性的目的是检查在您获取对象和更新对象之间是否有任何更新。
例如,如果在您的代码中获取一个product
,则更新其属性,同时对象已更改在数据库中(另一段代码更新了它),然后你保存:你正在尝试用版本2 更新对象,但是它有<数据库中的strong>版本3 。
这可以帮助您阻止对数据库的并发访问。
我不知道您要查找的功能是否会在OrientDB
中实施。
如果你不需要它,那么就不要这样做。如果你真的需要这个,你可以自己动手,也可以通过创建一个Product_old类并用更新时的先前记录填充它。