# Extreme Refactoring



## The_S (18. Feb 2009)

Hi-Ho,

ich habe einen ganzen Haufen voll VOs, die natürlich eine Tabelle in einer DB repräsentieren. Die VOs sind unabhängig von der DB entstanden. Meine Aufgabe ist es nun, die VOs an die Tabellenstruktur anzupassen. Dabei fällt auf, dass der DB-Designer einen Integer als ID für die Tabellen verwendet hat, wir aber auf einen Long (BigInt) gesetzt haben.

Wie bekomme ich jetzt am simpelsten die IDs meiner ganzen VOs (ein package + subpackages) und die dazugehörigen Getter und Setter in einen Integer geändert? Optimal wäre natürlich, wenn die ganzen Zugriffe und Aufrufe der VOs auch automatisiert umgestellt werden können.

Danke!

Ps.: Das Mapping übernimmt Hibernate.


----------



## tfa (18. Feb 2009)

Eigentlich sollte Hibernate damit zurecht kommen, sodass eine Änderung unnötig ist. 
In unserer DB sind die IDs auch Integer, auf Java-Seite aber Longs. Das passt.
(Wir warten auf eine neue DB2-Version, die endlich 64-Bit-Integer unterstützt, sonst gehen uns in ca. 4 Jahren die IDs aus).


----------



## The_S (18. Feb 2009)

Macht er aber nicht. Ich erhalte folgende Fehlermeldung


```
java.lang.ExceptionInInitializerError
	at de.so.dlp.handler.I18NHandler.<init>(I18NHandler.java:19)
	at de.so.dlp.handler.ExtrapolationHandler.<init>(ExtrapolationHandler.java:58)
	at de.so.dlp.facade.DispoFacade.<init>(DispoFacade.java:70)
	at de.so.dlp.facade.dispo.DispoFacadeTest.setUp(DispoFacadeTest.java:78)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
	at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: dlp] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	at de.so.dlp.persistence.dao.BaseDAO.<clinit>(BaseDAO.java:47)
	... 27 more
Caused by: org.hibernate.HibernateException: Wrong column type in DLP.COOPERATION_GROUP_FORM_ASSIGNMENT for column ID_COOPERATION_FORM. Found: integer, expected: bigint
	at org.hibernate.mapping.Table.validateColumns(Table.java:261)
	at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1089)
	at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:116)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:317)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	... 31 more
```

Außerdem ist Hibernate nur ne Übergangslösung. Später kommt dann die SAP (NetWeaver) Seuche ins Haus


----------



## foobar (18. Feb 2009)

> Außerdem ist Hibernate nur ne Übergangslösung. Später kommt dann die SAP (NetWeaver) Seuche ins Haus


Was ist so schlimm daran?


----------



## The_S (18. Feb 2009)

foobar hat gesagt.:


> Was ist so schlimm daran?



Für das, was wir machen/brauchen total überladen, folglich überteuert, und man binded sich an SAP.


----------

