From class org.opensaml.storage.impl.JPAStorageRecord:
@Column(name="value", nullable = false)
public String getValue()
The @Lob apparently causes Hibernate, when used together with Postgresql, to use the "value" column to store a large object's OID as a string, but this value is not seen as an object reference by Postgresql so the large object is immediately orphaned (vacuumlo would delete it).
Overriding the @Lob annotation with a custom orm.xml mapping makes Hibernate store the actual value (JSON) in the column, as it probably should. Would it be possible to remove @Lob in order to get correct behaviour with Postgresql? I don't know how this would affect other database engines...