[hibernate-dev] [OGM] Id generation strategies

Gunnar Morling gunnar at hibernate.org
Tue Jun 24 09:07:10 EDT 2014


2014-06-24 14:55 GMT+02:00 Emmanuel Bernard <emmanuel at hibernate.org>:

>
> On 24 Jun 2014, at 11:50, Gunnar Morling <gunnar at hibernate.org> wrote:
>
> Yes, today we don't.
>
> But is there any reason for not using the value column name?
>
>
> Not more that the ones I outlined in this thread.
>
> In fact that's what my pending PR
> https://github.com/hibernate/hibernate-ogm/pull/337 does for MongoDB.
> Right now it even allows to work with different value column names for the
> same table (either in the same or in different documents/records) but I
> plan to add a check disallowing this for the sake of portability to stores
> with a fixed schema.
>
>
> I don’t follow that one. A fixed schema would be fine here, just with two
> columns instead of one, no?
>

Yes, this could work, though I'm not sure when one would actually want to
make use of such an approach. I guess we can leave it out for now and wait
until we actually have store with a fixed schema.

Btw. ORM itself stumbles upon such configuration (the table is generated
with one of the two columns, causing an error when trying to select from
the other one).



>
>
>
> 2014-06-20 13:00 GMT+02:00 Emmanuel Bernard <emmanuel at hibernate.org>:
>
>>
>> On 19 Jun 2014, at 14:54, Gunnar Morling <gunnar at hibernate.org> wrote:
>>
>>  valueColumnName is something that I elected no to use because NoSQL we
>>>> bind to so far do not have a strong schema. And at at given
>>>> segmentColumnValue only correspond a single value. It would come and bite
>>>> me if someone for the same segment value had two different value column
>>>> names to differentiate two different sequence.
>>>
>>>
>>> Would it really bite you? I think e.g. MongoDB could perfectly handle
>>> this case via two different fields for the two sequences in the same
>>> document/segment.
>>>
>>>
>>> @TableGenerator(
>>> name=“1”,
>>> table=“Seq_table”,
>>> pkColumnName=“key”,
>>>  pkColumnValue=“1”,
>>> valueColumnName=“value1”
>>> )
>>> @TableGenerator(
>>> name=“2”,
>>>  table=“Seq_table”,
>>> pkColumnName=“key”,
>>> pkColumnValue=“1”,
>>>  valueColumnName=“value2”
>>> )
>>>
>>> The two definitions share the same options except for valueColumnName.
>>> The table is roughly as followed
>>>
>>> TABLE(Seq_table)
>>> key    |    value1   |   value2
>>> 1        |   10           |  24
>>>
>>> What would be the MongoDB representation in your approach?
>>>
>>
>> It would look like this:
>>
>>     {
>>         "_id" : 1,
>>         "value1" : 10,
>>         "value2" : 24
>>     }
>>
>> So you would get the different sequence values from different fields of
>> that same document. But I wouldn't recommend to do so due to the potential
>> contention on that single record. Thus I'd raise at least a warning during
>> bootstrap. As it's not portable to stores with a fixed schema, I'd rather
>> not support it at all, though, and raise an error.
>>
>>
>> Exactly. But that’s the thing, AFAIK we do *not* store it that way today
>> as we don’t use valueColumnName. So today we store it like this
>>
>> {
>>    “_id”: 1,
>>    “sequence_value”: 10
>> }
>>
>> so 10 and 24 has to both live at the same time in sequence _value.
>>
>>
>
>


More information about the hibernate-dev mailing list