openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From MiƂosz Tylenda <mtyle...@o2.pl>
Subject Re: Reverse Mapping by MappingTool does'n delete unnecessary columns
Date Sun, 04 Oct 2009 15:04:06 GMT
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.
> 

Mime
View raw message