[Hibernate-JIRA] Created: (HHH-2448) Generate identical column aliases among cluster
by Loïc LEFEVRE (JIRA)
Generate identical column aliases among cluster
-----------------------------------------------
Key: HHH-2448
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2448
Project: Hibernate3
Type: Improvement
Components: query-sql
Versions: 3.2.2
Environment: Hibernate version: 3.2.2, 2.1.8
Database: Oracle 9.2.0.8
Reporter: Loïc LEFEVRE
Attachments: report_1.txt, report_2.txt
Among our weblogic cluster (12 instances), we can see that a query can have different column aliases.
Although all seems correct, when regarding database reports like StatsPack or Spotlight we can see that because of these different aliases, the reports are wrong. Indeed, a resource consuming query can see its associated report properties (cpu usage, buffer gets, number of executions...) divided by the number of weblogic instances of our cluster (i.e. divided by 12) thus preventing us to pinpoint the queries to look at.
On a 3 instances cluster, we can see this report:
REPORT#1: one statement with a poor number of buffer gets/execution is reported splitted in 3, see the alias generated for column DTO.CREATION_DATE
for example
On a 4 instances cluster, we can see this report:
REPORT#2: one statement responsible of the latch free/cache buffers chains wait events splitted in 4, note the column alias generated fordeffcashcy0_.BEST_EXPECTED_CY
More than confusing the DBAs about the same query with n different "faces", our reports don't show us all the queries to look at: indeed, in our "Top 50 queries", a lot of them are duplicates! Also the memory required in the SGA to store the queries, the execution plan and so on is increased...
Finally, although the column aliases can have up to 30 characters under Oracle, the limit is set to 10, why?
--
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
11 years, 11 months
[Hibernate-JIRA] Created: (HHH-2308) Adjusting the Outer Join Predicate using Criteria Query
by Ben Grant (JIRA)
Adjusting the Outer Join Predicate using Criteria Query
-------------------------------------------------------
Key: HHH-2308
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2308
Project: Hibernate3
Type: New Feature
Components: query-criteria
Versions: 3.2.1
Environment: Linux Using MS SQLServer
Reporter: Ben Grant
I have two tables
Table A
||Col_1||Col_2||
|London| UK |
|Liverpool| UK |
| New York | USA |
Table B
||Col_1||Col_2|| Col_3||
| UK | Europe | 0
| USA | Americas | 1
Using the Criteria class, Restriction Class and FetchMode, Hibernate manages to create a query that looks like this
select distinct top 2000
this_.Col_1 as y0_, TableB3_.Col2 as y1_
from TableA this_
left outer join TableB TableB3_ on this_.Col_2= TableB3_.Col_1
where TableB3_.Col_3=1
When really i need the query to be like this
select distinct top 2000
this_.Col_1 as y0_, TableB3_.Col2 as y1_
from TableA this_
left outer join TableB TableB3_ on this_.Col_2= TableB3_.Col_1 AND TableB3_.Col_3=1
currently their isn't any know way for hibernate to adjust or apply filters within the join clause.
--
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
11 years, 11 months
[Hibernate-JIRA] Created: (HBX-939) Composite IDs and many-to-many relationships
by Markus Kramer (JIRA)
Composite IDs and many-to-many relationships
--------------------------------------------
Key: HBX-939
URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-939
Project: Hibernate Tools
Issue Type: Bug
Affects Versions: 3.2beta9
Environment: Hibrnate 3.2.1, Postgresql 8.1.8
Reporter: Markus Kramer
Attachments: B.hbm.xml, testdb.sql
The detection of many-to-many relationships doesn't work correctly if the primary key of one of the involved tables consists of more than one field.
An example:
One of two tables (table 'A') of a many-to-many relationship has a primary key consisting of two attributes (id1 and id2).
The generated B.hbm.xml for the table 'B' contains this:
<set name="as" inverse="true" table="a_b">
<key>
<column name="b_id" not-null="true" />
</key>
<many-to-many entity-name="test.A">
<column name="a_id1" not-null="true" />
</many-to-many>
</set>
But there should be another entry for the referenced primary key:
<column name="a_id2" not-null="true" />
The SQL code for the used tables and the complete B.hbm.xml are attached.
--
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
11 years, 12 months
[Hibernate-JIRA] Created: (HHH-2796) Generated version are incremented by Hibernate
by Heba Tawfik (JIRA)
Generated version are incremented by Hibernate
----------------------------------------------
Key: HHH-2796
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2796
Project: Hibernate3
Issue Type: Bug
Components: core
Affects Versions: 3.2.1
Environment: 3.2.1, Oracle 10g
Reporter: Heba Tawfik
Creating a new entity which it's version is set to generated="always" & saving it, then in the same session adding an object to any of its on-to-many relationships is throwing a StaleObjectStateException.
To regenerate the problem, consider the following code
1- departement.hbm.xml :
----------------------------------------
<hibernate-mapping package="com.myproject.domain">
<class name="Departement" table="Departement">
<id name="id">
<column name="dept_id" />
</id>
<version column="version" generated="always" name="version" type="integer" unsaved-value="null" />
<property name="name" column="name" />
<bag name="employees" inverse="true" cascade="all" lazy="true">
<key column="dept_id"></key>
<one-to-many class="Employee" />
</bag>
</class>
</hibernate-mapping>
2- employee.hbm.xml :
--------------------------------------
<hibernate-mapping package="com.myproject.domain">
<class name="Employee" table="Employee">
<id name="id">
<column name="employee_id" />
</id>
<property name="firstName" column="first_name" />
<property name="lastName" column="last_name" />
<property name="age" column="age" />
<property name="salary" column="salary" />
<many-to-one cascade="none"
class="com.myproject.domain.Departement"
column="dept_id" embed-xml="true" insert="false"
name="department" not-null="false"
unique="false" update="false" not-found="ignore">
</many-to-one>
</class>
</hibernate-mapping>
3- Departement.Java
---------------------------
package com.myproject.domain;
import java.util.ArrayList;
import java.util.List;
public class Departement extends BaseDepartement{
int id;
String name;
List employees;
Integer version;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public List getEmployees() {
return employees;
}
public void setEmployees(List employees) {
this.employees = employees;
}
public void addToEmployeeList(Employee emp)
{
if(employees==null)
{
setEmployees(new ArrayList());
}
employees.add(emp);
}
}
4- Employee.Java :
---------------------------
package com.myproject.domain;
public class Employee {
int id;
String firstName;
String lastName;
int age;
int salary;
BaseDepartement department;
public BaseDepartement getDepartment() {
return department;
}
public void setDepartment(BaseDepartement department) {
this.department = department;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
4- Code To Test :
------------------------
public static void main(String args[]) throws Exception
{
SessionFactory factory = new Configuration().configure("com/myproject/config/hibernate.cfg.xml").buildSessionFactory();
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
Departement aDept =new Departement();
aDept.setId(10);
aDept.setName("Test");
session.save(aDept);
transaction.commit();
transaction = session.beginTransaction();
Employee emp=new Employee();
emp.setId(10);
emp.setFirstName("test");
emp.setLastName("test");
emp.setSalary(10);
emp.setAge(10);
emp.setDepartment(aDept);
aDept.addToEmployeeList(emp);
session.saveOrUpdate(aDept);
transaction.commit();
session.close();
}
On the database, the default value for version cloumn is set to "1" and a trigger is defined as follow on the Departement table:
create or replace
TRIGGER TRIGGER1
BEFORE UPDATE ON DEPARTEMENT
FOR EACH ROW
BEGIN
:new.version:= :old.version + 1;
END;
Upon executing the above code, the following is the hibernate logging :
automatically flushing session
/* insert com.eds.myproject.domain.Departement
*/ insert
into
Departement
(name, dept_id)
values
(?, ?)
binding 'Test' to parameter: 1
binding '10' to parameter: 2
/* get generated state com.eds.myproject.domain.Departement */ select
departemen_.version as version1_
from
Departement departemen_
where
departemen_.dept_id=?
binding '10' to parameter: 1
returning '1' as column: version1_
before transaction completion
after transaction completion
automatically flushing session
/* get current state com.eds.myproject.domain.Employee */ select
employee_.employee_id,
employee_.first_name as first2_0_,
employee_.last_name as last3_0_,
employee_.age as age0_,
employee_.salary as salary0_
from
Employee employee_
where
employee_.employee_id=?
binding '10' to parameter: 1
/* insert com.eds.myproject.domain.Employee
*/ insert
into
Employee
(first_name, last_name, age, salary, employee_id)
values
(?, ?, ?, ?, ?)
binding 'test' to parameter: 1
binding 'test' to parameter: 2
binding '10' to parameter: 3
binding '10' to parameter: 4
binding '10' to parameter: 5
/* update
com.eds.myproject.domain.Departement */ update
Departement
set
name=?
where
dept_id=?
and version=?
binding 'Test' to parameter: 1
binding '10' to parameter: 2
binding '2' to parameter: 3
Could not synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.eds.myproject.domain.Departement#10]
at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1714)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2357)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2257)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2557)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.eds.myproject.test.Test.main(Test.java:43)
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.eds.myproject.domain.Departement#10]
at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1714)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2357)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2257)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2557)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.eds.myproject.test.Test.main(Test.java:43)
--
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
12 years
[Hibernate-JIRA] Created: (HHH-2776) Restrictons.in(..) generates invalid SQL if list of values is empty
by Adrian Smith (JIRA)
Restrictons.in(..) generates invalid SQL if list of values is empty
-------------------------------------------------------------------
Key: HHH-2776
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2776
Project: Hibernate3
Issue Type: Bug
Components: query-criteria
Affects Versions: 3.2.2
Environment: Hibernate 3.2.2.ga, MySQL 4.1.18, Windows XP
Reporter: Adrian Smith
I have classes called A and B. There is a 1:n relationship from A to B.
Class B has the following in its mapping file:
<many-to-one name="a" class="A" column="fk_a_id" not-null="true" />
If I write the following code:
List<B> foo() {
List<A> aList = ....
Session session = ....
Criteria query = session.createCriteria(B.class);
query.add(Restrictions.in("a", aList));
return query.list();
}
Then all works fine and the results I want are returned. However, if aList is empty (i.e. aList.size()==0) then the query.list function generates and executes invalid SQL for MySQL.
java.sql.SQLException: Syntax error or access violation message from server: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1"
I imagine that it is generating SQL like IN () which isn't valid.
I realize it's a bit ridiculous to want to find the rows where a field is IN the empty list. Nothing will ever be returned. However, in my opinion it should still be allowed, and return no rows, just as saying "WHERE 1=2" is allowed, just doesn't return any rows.
--
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
12 years, 1 month