title: Handling class changes when using ORM such as ODB
body: <p>I am looking into using an ORM (Objection Relational Mapper) to allow me to persist my C++ objects into an SQLite database. I'm currently considering ODB by CodeSynthesis.</p>
  
  <p>See: <a href="http://www.codesynthesis.com/products/odb/" rel="nofollow">http://www.codesynthesis.com/products/odb/</a></p>
  
  <p>Looking at the docs for ODB, I don't see an answer to a nagging question I have, which is:</p>
  
  <p>What happens if I create a class, persist it to the DB, but then in a later version of my product change the class. When the user gets the new version of my software, how will the old data get loaded properly into the new version of the class?</p>
  
  <p>I've looked at boost::serialize before and it has mechanisms to handle this kind of "upgrading", but I'm wondering:</p>
  
  <ol>
  <li>How is this handled in ORM tools generally speaking?</li>
  <li>How to do this with ODB specifically</li>
  <li>Is there a better ORM tool than ODB for handling this problem?</li>
  </ol>