views:

1725

answers:

1
@Entity
public class Person {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private int salary;

    @Version
    private long version;

    // ...getters and setters
}
  1. may i know is there required to create set/get for "version" ?
  2. in my code ,when persist (saveorupdate) this entity with hibernate, i do not need to set any value for "version" right?
  3. why else do i need to configure in order to use optimistic concurrency checking with spring hibernateTemplate.saveorupdate? all database supported?
  4. how to unit-test this entity? in my database , all my records showing version field has value of 0
  5. is each time calling hibernatetemplate.saveorupdate, will increment the version value?
+3  A: 

I would say:

  1. set/get version is required, as you might assign the version yourself sometimes (when recreating an new instance from old data)
  2. You don't need if you read the instance from the database. (When creating it in your code with new, it would be a different story).
  3. I see nothing else. I never had a problem with a database.
  4. Unit test don't go the database in my opinion, so tests involving the database are called integration tests. You shouldn't have too much of them, as they are slow, and they don't really test your code, but more the Hibernate/Driver/Database codes ... You should trust them, or just test them once, but not for all your entities.
    To see version values more than 0, read/modify/update your entity in a transaction, the version increase by one. Go out of the transaction, do it again, the value increases ...
  5. The version will increase each time the database row is modified.
KLE
@KLE just in case 2 user call hibernatetemplate.saveorupdate same time , no need to put extra checking when call call hibernatetemplate.saveorupdate ? any exception throws?
cometta
@cometta The point is not to save or not, but where the data comes from. In a transaction, **if you read an entity from the database**, it's version info is up to date. When you save it, it is taken care automatically. If you happen some day to obtain the data from another source (for example the post of a form), and recreate the entity, then you have to care of the version yourself.
KLE