[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
14 years, 4 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
14 years, 4 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
14 years, 4 months
[Hibernate-JIRA] Created: (HHH-3526) hbm2ddl.auto validate error on sequences in different schema
by Andres Galeano (JIRA)
hbm2ddl.auto validate error on sequences in different schema
------------------------------------------------------------
Key: HHH-3526
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3526
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.3.1
Environment: Hibernate 3.3.1 GA & Oracle 9i Database
Reporter: Andres Galeano
Hello,
My situation is that I have an persistent object and matching hbm that reference a table and sequence in a different oracle schema. When I set the "hibernate.hbm2ddl.auto" property to "validate", a hibernate error message claims that the sequence does not exist, although it does and is accessible.
>From stepping through the code
in class: org.hibernate.tool.hbm2ddl.DatabaseMetadata
in method: public boolean isSequence(Object key)
This code parses the 'key', in this case sequence name, by '.' and searches to see if the last element is contained in the list of sequences. So if I prefix my sequence name with the schema name it belongs to, it's ignored. This doesn't seem right to me.
The code also seems to ignore the "schema" attribute of the "hibernate-mapping/class" element when validating sequence generators. To me this seems wrong as well.
Since the 'list of sequences' is only for the current schema, at least in the case of Oracle9Dialect, the validate fails, even though the sequence does exist and seems to be properly specified to me.
------------------------------------------------------------
Excerpt from my hbm.xml file:
------------------------------------------------------------
...
...
<hibernate-mapping>
<class name="bus.Accesspurpose" table="ACCESSPURPOSE" schema="WISH">
<id name="id" type="int">
<column name="ACCESSPURPOSEID" />
<generator class="sequence">
<!-- Prefixed with schema for database validation. -->
<param name="sequence">WISH.SEQ_ACCESSPURPOSEID</param>
</generator>
</id>
...
...
------------------------------------------------------------
Full stack trace.
------------------------------------------------------------
2008-10-08 10:47:15,375 ERROR Thread-1 org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SecurityManager' defined in class path resource [bus/wishdb-service-context.xml]: Cannot resolve reference to bean 'SecurityManagerDao' while setting bean property 'securityManagerDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SecurityManagerDao' defined in class path resource [db/wishdb-data-context.xml]: Cannot resolve reference to bean 'mySessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in class path resource [db/pp-app-data-context.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing sequence or table: WISH.SEQ_ACCESSPURPOSEID
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1172)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:940)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:437)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:400)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:736)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:369)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:825)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:714)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SecurityManagerDao' defined in class path resource [db/wishdb-data-context.xml]: Cannot resolve reference to bean 'mySessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in class path resource [db/pp-app-data-context.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing sequence or table: WISH.SEQ_ACCESSPURPOSEID
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1172)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:940)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:437)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
... 41 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in class path resource [db/pp-app-data-context.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing sequence or table: WISH.SEQ_ACCESSPURPOSEID
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1260)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:438)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
... 53 more
Caused by: org.hibernate.HibernateException: Missing sequence or table: WISH.SEQ_ACCESSPURPOSEID
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1127)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:349)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:799)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:733)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1257)
... 62 more
-----------------------------------------------------------
_________________
Thanks,
- Andy
See also the forums post:
http://forum.hibernate.org/viewtopic.php?t=991326
--
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
14 years, 5 months