[Hibernate-JIRA] Created: (HHH-5091) Unidirectional One-To-Many relationship with foreign key mapping doesn't work
by Juergen Zimmermann (JIRA)
Unidirectional One-To-Many relationship with foreign key mapping doesn't work
-----------------------------------------------------------------------------
Key: HHH-5091
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5091
Project: Hibernate Core
Issue Type: Bug
Affects Versions: 3.5.0-Final
Reporter: Juergen Zimmermann
I've the following 2 tables (in PostgreSQL) in a one-to-many relationship with foreign key mapping:
CREATE TABLE bestellung(
b_id BIGSERIAL NOT NULL PRIMARY KEY,
version INTEGER DEFAULT 0,
kunde_fk BIGINT NOT NULL REFERENCES kunde(k_id)
);
CREATE TABLE bestellposition(
bp_id BIGSERIAL NOT NULL PRIMARY KEY,
version INTEGER DEFAULT 0,
artikel_fk BIGINT NOT NULL REFERENCES artikel(a_id),
anzahl SMALLINT NOT NULL,
bestellung_fk BIGINT NOT NULL REFERENCES bestellung(b_id)
);
Now the 2 JPA entity classes:
// owner class
@Entity
@Table(name="bestellung")
public class Bestellung implements java.io.Serializable {
@Id
@GeneratedValue(generator="bestellung_sequence_name")
@SequenceGenerator(name="bestellung_sequence_name", sequenceName="bestellung_b_id_seq", allocationSize=1)
@Column(name="b_id", nullable=false)
private Long id = null;
@Version
private int version = 0;
// bidirectional
@ManyToOne(optional=false)
@JoinColumn(name="kunde_fk")
@NotNull(message="{bestellverwaltung.bestellung.kunde.notNull}")
private Kunde kunde;
// unidirectional and cascading persist
@OneToMany(fetch=EAGER, cascade={PERSIST, REMOVE}, orphanRemoval=true)
@JoinColumn(name="bestellung_fk")
@OrderBy("id ASC")
@NotEmpty(message="{bestellverwaltung.bestellung.bestellpositionen.notEmpty}")
private List<Bestellposition> bestellpositionen;
}
// dependant class
@Entity
@Table(name="bestellposition")
public class Bestellposition implements java.io.Serializable {
@Id
@GeneratedValue(generator="bestellposition_sequence_name")
@SequenceGenerator(name="bestellposition_sequence_name", sequenceName="bestellposition_bp_id_seq", allocationSize=1)
@Column(name="bp_id", nullable=false)
private Long id = null;
@Version
private int version = 0;
@Column(nullable=false)
@Min(value=ANZAHL_MIN, message="{bestellverwaltung.bestellposition.anzahl.min}")
private short anzahl = 1;
@ManyToOne(optional=false)
@JoinColumn(name="artikel_fk")
@NotNull(message="{bestellverwaltung.bestellposition.artikel.notNull}")
private Artikel artikel;
}
Inside the owner class the dependent class is declared with cascade=PERSIST (see above). When I try to create a persistent entity of class Bestellung (owner class) then the generated SQL statement is wrong because the foreign key ("bestellung_fk") for the owner record is missing.
insert into bestellposition(anzahl, artikel_fk, version, bp_id)
values(?, ?, ?, ?)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
15 years, 8 months
[Hibernate-JIRA] Created: (HHH-3478) @NaturalId queries not flushed from cache using EntityManager.remove(); exception results from query
by Elias Ross (JIRA)
@NaturalId queries not flushed from cache using EntityManager.remove(); exception results from query
----------------------------------------------------------------------------------------------------
Key: HHH-3478
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3478
Project: Hibernate Core
Issue Type: Bug
Affects Versions: 3.3.0.SP1
Environment: Java 1.5, Maven dependencies:
[INFO] (root)
[INFO] | \- org.hibernate:hibernate-validator:jar:3.1.0.GA:compile
[INFO] +- commons-codec:commons-codec:jar:1.3:compile
[INFO] +- javax.persistence:persistence-api:jar:1.0:compile
[INFO] +- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile
[INFO] | +- antlr:antlr:jar:2.7.6:compile
[INFO] | +- commons-collections:commons-collections:jar:3.1:compile
[INFO] | \- dom4j:dom4j:jar:1.6.1:compile
[INFO] | \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] +- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile
[INFO] | \- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile
[INFO] +- org.hibernate:hibernate-commons-annotations:jar:3.3.0.ga:compile
[INFO] | \- org.hibernate:hibernate:jar:3.2.1.ga:compile
[INFO] | +- net.sf.ehcache:ehcache:jar:1.2.3:compile
[INFO] | +- asm:asm-attrs:jar:1.5.3:compile
[INFO] | +- cglib:cglib:jar:2.1_3:compile
[INFO] | \- asm:asm:jar:1.5.3:compile
[INFO] +- org.hibernate:hibernate-entitymanager:jar:3.4.0.GA:compile
[INFO] | \- javassist:javassist:jar:3.4.GA:compile
[INFO] +- javax.transaction:jta:jar:1.0.1B:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.5.2:compile
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.5.2:compile
[INFO] +- hsqldb:hsqldb:jar:1.8.0.10:test
[INFO] \- junit:junit:jar:4.4:test
Reporter: Elias Ross
Attachments: Dummy.java, DummyTest.java, persistence.xml
See attached test case and entity.
Current Result:
javax.persistence.EntityNotFoundException: Unable to find com.autodesk.lbs.cs.Dummy with id 1
at org.hibernate.ejb.Ejb3Configuration$Ejb3EntityNotFoundDelegate.handleEntityNotFound(Ejb3Configuration.java:113)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:171)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:873)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:590)
at org.hibernate.type.ManyToOneType.assemble(ManyToOneType.java:219)
at org.hibernate.cache.StandardQueryCache.get(StandardQueryCache.java:155)
at org.hibernate.loader.Loader.getResultFromQueryCache(Loader.java:2184)
at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2147)
at org.hibernate.loader.Loader.list(Loader.java:2117)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:328)
at com.autodesk.lbs.cs.DummyTest.naturalKeyCachedQuery(DummyTest.java:69)
at com.autodesk.lbs.cs.DummyTest.naturalKeyCachedQuery(DummyTest.java:61)
at com.autodesk.lbs.cs.DummyTest.testQuery(DummyTest.java:49)
It's expected that a cache invalidation occurs with an entity's natural key when it is removed.
I'll investigate a solution.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
15 years, 8 months
[Hibernate-JIRA] Created: (HHH-5315) AuditJoinTable rows are no longer flushed to the database
by Erik-Berndt Scheper (JIRA)
AuditJoinTable rows are no longer flushed to the database
---------------------------------------------------------
Key: HHH-5315
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5315
Project: Hibernate Core
Issue Type: Bug
Components: envers
Affects Versions: 3.5.2, 3.5.1
Environment: JPA with extended persistence context
Reporter: Erik-Berndt Scheper
Priority: Minor
In Hibernate core 3.5.1 issue HHH-3543 was fixed by using BeforeTransactionCompletionProcess instead of a transaction synchronization. I have found that since this change, rows in AuditJoinTables are no longer flushed to the database. (Envers 3.5.0 final works fine).
I can work around the issue by adding a manual entityManager.flush() or by setting the flushmode to manual.
I have noticed that AuditProcess.java already executes a flush() statement, but this does not seem to suffice. I believe this is caused by the fact that during the doBeforeTransactionCompletion() extra WorkUnits are added to the hibernate ActionQueue (PersistentCollectionChangeWorkUnit) which process the AuditJoinTables.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
15 years, 8 months
[Hibernate-JIRA] Created: (HHH-5212) Alter SQLFunction contract to be more flexible
by Steve Ebersole (JIRA)
Alter SQLFunction contract to be more flexible
----------------------------------------------
Key: HHH-5212
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5212
Project: Hibernate Core
Issue Type: Improvement
Components: core, query-criteria, query-hql
Reporter: Steve Ebersole
The SQLFunction contract currently combines contextual information (render/getReturnType) and non-contextual (aka non-changing) information (hasArguments/hasParenthesesIfNoArguments).
An example I just ran into where separating these would have been nice is in HHH-5173. Some dialects return the argument data type when applying the AVG() function. That is problematic for INTEGER values because the decimal portion gets dropped. On those databases one would need to CAST() the argument to get the correct behavior. However, again, this is only necessary based on the argument type. If the argument type is already a non-integer the cast is uneeded.
Proposal (as always name subject to change/suggestion):
{code}
interface SQLFunction {
public boolean hasArguments();
public boolean hasParenthesesIfNoArguments();
public RenderingContext getRenderingContext(Type columnType, SessionFactoryImplementor factory);
public static interface RenderingContext {
public Type getReturnType();
public String render(List args);
}
}
{code}
I used SessionFactoryImplementor as the argument to getRenderingContext, but the current getReturnType accepts a Mapping. Is there really ever a time when we call that method when we do not have a SessionFactory? My usage search shows no usages of this method passing in a Configuration (which is the other Mapping implementor aside from SessionFactory).
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
15 years, 8 months