[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-6721) The "invalid column name" error message is misleading when the real problem is that there is a bean field that doesn't have a matching column name in the query.

Strong Liu (JIRA) noreply at atlassian.com
Wed Oct 19 14:19:19 EDT 2011


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6721?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Strong Liu updated HHH-6721:
----------------------------

    Description: 
If I have the following bean:
{code}
@Entity
public class Foobar
{
	@Id
	private int id;
	private String name;
}

and the following unit tests:

    @PersistenceContext(unitName = "reports2") private EntityManager em;

    @Test
    public void testGoodColumnName() {
    	em.createNativeQuery("select 1 id, 'name' name from dual",Foobar.class)
    		.getResultList();
    }

    @Test
    public void testBadColumnName() {
    	em.createNativeQuery("select 1 id, 'name' name2 from dual",Foobar.class)
		.getResultList();
    }
{code}
the first unit test will succeed, but the second will fail with an "Invalid column name" SQLException.

The reason for this is that the "name" field in the class doesn't have a corresponding "name" column in the query.

Because I'm using Oracle I'm used to getting error messages which are unhelpful because they don't mention the column name that is invalid when I write an invalid query. As a result I spent a lot of time trying to figure out why the query worked when run in Squirrel SQL but not when run with Hibernate. Of course, I eventually figured out that the problem was the one I outlined above.

It would have been much simpler for me if the error message had simply said something like "The query does not specify a column which corresponds to the 'name' field of bean com.foo.Foobar.".



  was:
If I have the following bean:

@Entity
public class Foobar
{
	@Id
	private int id;
	private String name;
}

and the following unit tests:

    @PersistenceContext(unitName = "reports2") private EntityManager em;

    @Test
    public void testGoodColumnName() {
    	em.createNativeQuery("select 1 id, 'name' name from dual",Foobar.class)
    		.getResultList();
    }

    @Test
    public void testBadColumnName() {
    	em.createNativeQuery("select 1 id, 'name' name2 from dual",Foobar.class)
		.getResultList();
    }

the first unit test will succeed, but the second will fail with an "Invalid column name" SQLException.

The reason for this is that the "name" field in the class doesn't have a corresponding "name" column in the query.

Because I'm using Oracle I'm used to getting error messages which are unhelpful because they don't mention the column name that is invalid when I write an invalid query. As a result I spent a lot of time trying to figure out why the query worked when run in Squirrel SQL but not when run with Hibernate. Of course, I eventually figured out that the problem was the one I outlined above.

It would have been much simpler for me if the error message had simply said something like "The query does not specify a column which corresponds to the 'name' field of bean com.foo.Foobar.".




> The "invalid column name" error message is misleading when the real problem is that there is a bean field that doesn't have a matching column name in the query.
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HHH-6721
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6721
>             Project: Hibernate Core
>          Issue Type: Improvement
>          Components: query-sql
>         Environment: hibernate-core 3.6.6.Final. Oracle database.
>            Reporter: HappyEngineer
>            Priority: Minor
>              Labels: hibernate
>
> If I have the following bean:
> {code}
> @Entity
> public class Foobar
> {
> 	@Id
> 	private int id;
> 	private String name;
> }
> and the following unit tests:
>     @PersistenceContext(unitName = "reports2") private EntityManager em;
>     @Test
>     public void testGoodColumnName() {
>     	em.createNativeQuery("select 1 id, 'name' name from dual",Foobar.class)
>     		.getResultList();
>     }
>     @Test
>     public void testBadColumnName() {
>     	em.createNativeQuery("select 1 id, 'name' name2 from dual",Foobar.class)
> 		.getResultList();
>     }
> {code}
> the first unit test will succeed, but the second will fail with an "Invalid column name" SQLException.
> The reason for this is that the "name" field in the class doesn't have a corresponding "name" column in the query.
> Because I'm using Oracle I'm used to getting error messages which are unhelpful because they don't mention the column name that is invalid when I write an invalid query. As a result I spent a lot of time trying to figure out why the query worked when run in Squirrel SQL but not when run with Hibernate. Of course, I eventually figured out that the problem was the one I outlined above.
> It would have been much simpler for me if the error message had simply said something like "The query does not specify a column which corresponds to the 'name' field of bean com.foo.Foobar.".

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list