On August 24, 2017 7:26:00 AM GMT+02:00, "jtuc...@objektfabrik.de" 
<jtuc...@objektfabrik.de> wrote:
>Am 23.08.17 um 11:08 schrieb Herby Vojčík:
>> jtuchel wrote:
>>> Herby,
>>>
>>> as Esteban already said, UPSERT doesn't make any sense in an ORM. It
>>
>> I don't know... I just create new object (with same "primary key")
>and 
>> register it (yes, I know I get an error - maybe I should be able to 
>> set the policy to "overwrite" and it would makes sense; or not?).
>>
>What I mean is that for an ORM, an object can only be new or old. It
>can 
>only be sure an object is Old if either
>a) The ORM itself has loaded it from the database
>b) the user forcibly tells it that an object is old
>
>There is no maybe in an ORM's world, because the consequences of maybe 
>can make the whole thing brittle. Maybe would make optimistic locking 
>and other mechanisms obsolete.
>
>>> either knows the object as one that has been read in this session or
>>> not. If not, it is new and needs to be inserted.
>>>
>>> You could, of course, try and see what happens if you let Glorp's
>insert
>>> operation always issue an UPSERT. This is probably very easy to do
>and
>>> at first sight there isn't too much I could think of that could go
>wrong
>>> with it.
>>>
>>> But I guess including a check for existence of an object as Esteban
>>> suggests isn't too bad from the performance and "safety" POV. not
>sure I
>>> understand how a Dictionary Mapping could help here....
>>
>> Similarly to what was posted above: I can simply at:put: and I don't 
>> care if I created the new key-value pair or overwritten the old value
>
>> (in cases where simply putting new object under a key is feasible, 
>> which is in this case).
>
>Still don't understand. An object has its attributes that are used as 
>its identification for the corresponding row in the DB (the primary key
>
>thereof). That is also true for objects that are the value of an 
>Asscoiation. The Smalltalk Dictionary is translated to something that 
>holds references to objects by their primary key (Haven't used Dict 

Yes, this cannot be avoided.
But in cases where I want to write over the item, I am not forced to choose 
between two different approaches and just use at:put:.

So it IMO helps from client code PoV.

>mappings yet, but I'd guess it's a link table). So I don't see how that
>
>would solve your problem an object's primary key is either known in a 
>session or it isn't. If it is, the object is known to have existed in 
>the database at read time, if not, it's assumed to be new.
>
>If it is assumed to be new, the DB provides a mechanism for avoiding 
>damage by its Uniqueness constraint and the ORM can only rely on that.
>
>
>Joachim

Reply via email to