hibernate4-maven-plugin 1.0.3 released!

Today we released the version 1.0.3 of hibernate4-maven-plugin to Central.

Scanning dependencies

This release of the plugin now supports scanning of dependencies. By default all dependencies in the scope compile are scanned for annotated classes. Thanks to Guido Wimmel, who pointed out, that this was really missing and supported the implementation with a little test-project for this use-case. Learn more…

Support for Hibernate Envers

Another new feature of this release is support for Hibernate Envers – Easy Entity Auditing. Thanks a lot to Victor Tatai, how implemented this, and Erik-Berndt Scheper, who helped integrating it and who supported the testin with a little test-project, that demonstrates the new feature. You can visit it at bitbucket as a starting point for your own experiments with this technique.

Less bugs!

Many thanks also to Stephen Johnson and Eduard Szente, who pointed out bugs and helped eleminating them…

Get your hands on – on central!

hibernate4-maven-plugin 1.0.3 is available in the Central Maven Repository.

Release notes:


commit adb20bc4da63d4cec663ca68648db0f808e3d181
Author: Kai Moritz
Date: Fri Oct 18 01:52:27 2013 +0200

Added missing documentation for skip-configuration

commit 99a7eaddd1301df0d151f01791e3d177297670aa
Author: Kai Moritz
Date: Fri Oct 18 00:38:29 2013 +0200

Added @since-Annotation to configuration-parameters

commit 221d977368ee1897377f80bfcdd50dcbcd1d4b83
Author: Kai Moritz
Date: Wed Oct 16 01:18:53 2013 +0200

The plugin now scans for annotated classes in dependencies too

commit ef1233a6095a475d9cdded754381267c5d1e336f
Author: Kai Moritz
Date: Wed Oct 9 21:37:58 2013 +0200

Project-Documentation now uses the own skin juplo-skin

commit 84e8517be79d88d7e2bec2688a8f965f591394bf
Author: Kai Moritz
Date: Wed Oct 9 21:30:28 2013 +0200

Reworked APT-Documentation: page-titles were missing

commit f27134cdec6c38b4c8300efb0bb34fc8ed381033
Author: Kai Moritz
Date: Wed Oct 9 21:29:30 2013 +0200

maven-site-plugin auf Version 3.3 aktualisiert

commit d38b2386641c7ca00f54d69cb3f576c20b0cdccc
Author: Kai Moritz
Date: Wed Sep 18 23:59:13 2013 +0200

Reverted to old behaviour: export is skipped, when maven.test.skip=true

commit 7d935b61a3d80260b9cacf959984e14708c3a96b
Author: Kai Moritz
Date: Wed Sep 18 18:15:38 2013 +0200

No configuration for hibernate.dialect might be a valid configuration too

commit caa492b70dc1daeaef436748db38df1c19554943
Author: Kai Moritz
Date: Wed Sep 18 18:14:54 2013 +0200

Improved log-messages

commit 2b1147d5e99c764c1f6816f4d4f000abe260097c
Author: Kai Moritz
Date: Wed Sep 18 18:10:32 2013 +0200

Variable "envers" should not be put into hibernate.properties

"hibernate.exoprt.envers" is no Hibernate-Configuration-Parameter.
Hence, it should not be put into the hibernate.properties-file.

commit 0a52dca3dd6729b8b6a43cc3ef3b69eb22755b0a
Author: Erik-Berndt Scheper
Date: Tue Sep 10 16:18:47 2013 +0200

Rename envers property to hibernate.export.envers

commit 0fb85d6754939b2f30ca4fc18823c5f7da1add31
Author: Erik-Berndt Scheper
Date: Tue Sep 10 08:20:23 2013 +0200

Ignore IntelliJ project files

commit e88830c968c1aabc5c32df8a061a8b446c26505c
Author: Victor Tatai
Date: Mon Feb 25 16:23:29 2013 -0300

Adding envers support (contribution from Victor Tatai)

commit e59ac1191dda44d69dfb8f3afd0770a0253a785c
Author: Kai Moritz
Date: Tue Sep 10 20:46:55 2013 +0200

Added Link to old Version 1.0.2 in documentation

commit 97a45d03e1144d30b90f2f566517be22aca39358
Author: Kai Moritz
Date: Tue Sep 10 20:29:15 2013 +0200

Execution is only skipped, if explicitly told so

commit 8022611f93ad6f86534ddf3568766f88acf863f3
Author: Kai Moritz
Date: Sun Sep 8 00:25:51 2013 +0200

Upgrade to Scannotation 1.0.3

commit 9ab53380a87c4a1624654f654158a701cfeb0cae
Author: Kai Moritz
Date: Sun Sep 8 00:25:02 2013 +0200

Upgrade to Hibernate 4.2.5.Final

commit 5715c7e29252ed230389cfce9c1a0376fec82813
Author: Kai Moritz
Date: Sat Aug 31 09:01:43 2013 +0200

Fixed failure when target/classes does not exist when runnin mvn test phase

Thanks to Stephen Johnson

Details from the original email:
---------
The following patch stops builds failing when target/classes (or no main java exists), and target/test-classes and src/tests exist.

So for example calling

mvn test -> invokes compiler:compile and if you have export bound to process-classes phase in executions it will fail. Maybe better to give info and carry on. Say for example they want to leave the executions in place that deal with process-classes and also process-test-classes but they do not want it to fail if there is no java to annotate in src/classes. The other way would be to comment out the executions bound to process-classes. What about export being bound to process-class by default? Could this also cause issues?

In either case I think the plugin code did checks for src/classes directory existing, in which case even call "mvn test" would fail as src/classes would not exist as no java existed in src/main only in src/test. Have a look through the patch and see if its of any use.

commit 9414e11c9ffb27e195193f5fa53c203c6297c7a4
Author: Kai Moritz
Date: Sat Aug 31 11:28:51 2013 +0200

Improved log-messages

commit da0b3041b8fbcba6175d05a2561b38c365111ed8
Author: Kai Moritz
Date: Sat Aug 31 08:51:03 2013 +0200

Fixed NPE when using nested classes in entities with @EmbeddedId/@Embeddable

Patch supplied by Eduard Szente

Details:
----------------
Hi,

when using your plugin for schema export the presence of nested classes
in entities (e.g. when using @EmbeddedId/@Embeddable and defining the Id
within the target entity class)
yields to NPEs.

public class Entity {

@EmbeddedId
private Id id;

@Embeddable
public static class Id implements Serializable {
....
}

}

Entity.Id.class.getSimplename == "Id", while the compiled class is named
"Entity$Id.class"

Patch appended.

Best regards,
Eduard

Log out from wrong Account with maven-appengine-plugin

Do you work with the maven-appengine-plugin and several google-accounts? If you do, or if you ever were logged in to the wrong google-account while executing mvn appengine:update, like me yesterday, you surely wondering, how to logout from maven-appengine-plugin.

maven-appengine-plugin somehow miracolously stores your credentials for you, when you attemp to upload an app for the first time. This comes in very handy, if you work with just one google-account. But it might get a “pain-in-the-ass”, if you work with several accounts. Because, if you once logged in into an account, there is no way (I mean: no goal of the maven-appengine-plugin) to log out, in order to change the account!

The solution: clear the credentials, that the maven-appengine-plugin stored on your behalf

Only after hard googling, i found a solution to this problem in a blog-post: maven-appengine-plugin stores its oauth2-credentials in the file .appcfg_oauth2_tokens_java in your home directory (on Linux – sorry Windows-folks, you have to figure out yourself, where the plugin stores the credentials on Windows).

Just delete the file .appcfg_oauth2_tokens_java and your logged out! The next time you call mvn appengine:upload you will be asked again to accept the request and, hence, can switch accounts. If you are not using oauth2, just look for .appcfg*-files in your home directory. I am sure, you will find another file with stored credentials, that you can delet to logout, like Radomir, who deleted .appcfg_cookiesy to log out.

Bidirectional Association with @ElementCollection

Have you ever wondered, how to map a bidirectional association from an entity to the instances of its element-collection? Actually, it is very easy, if you are using hibernate. It is just somehow hard to find in the documentation, if you are searching for it (look for chapter 2.4.3.4 in the Hibernate-Annotationss-Documentation).

Hibernate

So, here we go:
Just add the @Parent-annotation to the attribute of your associated @Embeddable-class, that points back to its parent.

@Entity
class Cat
{
  @Id
  Long id;

  @ElementCollection
  Set kittens;

  ...
}

@Embeddable
class Kitten
{
  // Embeddable's have no ID-property!

  @Parent
  private Cat mother;

  ...
}

Drawback

But this clean approach has a drawback: it only works with hibernate. If you work with other JPA-implementations or plain old JPA itself, it will not work. Hence, it will not work in googles appengine, for example!

Unfortunatly, there are no clean workarounds, to get bidirectional associations to @ElementCollections‘s working with JPA. The only workarounds I found, only work for directly embedded instances – not for collections of embedded instances:


If you want bidirectiona associations to the elements of your embedded collection, it works only with hibernate!