Hi,

I agree with your description - columns should be dropped. Looks like a bug or 
unimplemented feature. Don't you mind creating a JIRA [1] issue?

[1] http://issues.apache.org/jira/browse/OPENJPA

Greetings,
Milosz

> 
> Steps to reproduce:
> 1. Create the class:
> @Entity
> @Table(catalog = "testmysql", name = "city")
> public class CityEntity {
>       public CityEntity() {
>       }
> 
>       private String m_cityname;
> 
>       @Basic
>       @Column(name = "CityName", length = 15)
>       public String getCityname() {
>               return m_cityname;
>       }
> 
>       public void setCityname(String cityname) {
>               m_cityname = cityname;
>       }
> 
>       private long m_Id;
> 
>       @Id
>       @GeneratedValue(strategy = GenerationType.AUTO)
>       public long getId() {
>               return m_Id;
>       }
> 
>       public void setId(long id) {
>               m_Id = id;
>       }
> }
> 
> 2. Create the persistance.xml:
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence xmlns="http://java.sun.com/xml/ns/persistence"; version="1.0">
>     <persistence-unit name="NewPeristenceUnit">
>        
> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>         <class>testmysql.server.entity.CityEntity</class>
>         <properties>
>             <property name="openjpa.jdbc.SynchronizeMappings"
> value="refresh(primaryKeys=true, ForeignKeys=true)"/>
>             <property name="openjpa.ConnectionURL"
> value="jdbc:mysql://localhost:33306/testmysql2"/>
>             <property name="openjpa.ConnectionDriverName"
> value="com.mysql.jdbc.Driver"/>
>             <property name="openjpa.ConnectionUserName" value="root"/>
>             <property name="openjpa.ConnectionPassword" value="12345"/>
>             <property name="openjpa.Log" value="DefaultLevel=TRACE,
> Tool=INFO"/>
>         </properties>
>     </persistence-unit>
> </persistence>
> 3. Create the test method:
>       private String JPATest() {
>               EntityManagerFactory factory = null;
>               EntityManager manager = null;
>               try {
>                       factory = 
> Persistence.createEntityManagerFactory("NewPeristenceUnit");
>                       manager = factory.createEntityManager();
> 
>                       CityEntity city = new CityEntity();
> 
>                       manager.getTransaction().begin();
>                       manager.persist(city);
>                       manager.getTransaction().commit();
>               }
>                 catch{...}
> 
> 4. Run the test. In specified table in database are now 2 columns id and
> CityName.
> 5. Now delete all strings in CityEntity.java so, that entity CityEntity
> hasn't field CityName more:
> @Entity
> @Table(catalog = "testmysql", name = "city")
> public class CityEntity {
>       public CityEntity() {
>       }
> 
>       private long m_Id;
> 
>       @Id
>       @GeneratedValue(strategy = GenerationType.AUTO)
>       public long getId() {
>               return m_Id;
>       }
> 
>       public void setId(long id) {
>               m_Id = id;
>       }
> }
> 
> 6. Run test again.
> 7. Column CityName is still present in database table. But documentation for
> MappingTool about refresh schemaAction says:
> "refresh: Equivalent to retain, then add.
> retain: Keep all schema components in the given XML definition, but drop the
> rest from the database. This action never adds any schema components. "
> Unnecessary columns should be deleted in database since the entity doesn't
> contain mapped fields for them, when schemaAction is refresh.
> -- 
> View this message in context: 
> http://n2.nabble.com/Reverse-Mapping-by-MappingTool-does-n-delete-unnecessary-columns-tp3748079p3748079.html
> Sent from the OpenJPA Developers mailing list archive at Nabble.com.
> 

Reply via email to