Java 更改Naturald参数的名称后出错
我已使用liquibase更改了自然主义列名(从“名称”更改为“查询名称”):Java 更改Naturald参数的名称后出错,java,database,hibernate,rename,liquibase,Java,Database,Hibernate,Rename,Liquibase,我已使用liquibase更改了自然主义列名(从“名称”更改为“查询名称”): 它工作正常,名称已更改。。。我还用java更新了实体类: @Entity @Table( name = "pm_dbqueries", uniqueConstraints = { @UniqueConstraint(columnNames = "id"), @UniqueConstraint(columnN
它工作正常,名称已更改。。。我还用java更新了实体类:
@Entity
@Table( name = "pm_dbqueries", uniqueConstraints = { @UniqueConstraint(columnNames = "id"),
@UniqueConstraint(columnNames = "query_name") } )
@SequenceGenerator( name = "pm_dbqueries_seq", sequenceName = "pm_dbqueries_seq" )
public class DBQuery
{
@Id
@GeneratedValue( strategy = GenerationType.AUTO, generator = "pm_dbqueries_seq" )
@Column(name = "id", unique = true, nullable = false)
private Long id;
@NaturalId
@Column(name = "query_name", unique = true, nullable = false, length = 40)
private String queryName;
@Column(name = "query", unique = false, nullable = false, length = 4000)
private String query;
public Long getId()
{
return id;
}
public void setId( Long id )
{
this.id = id;
}
public String getQueryName()
{
return queryName;
}
public void setQueryName( String queryName )
{
this.queryName = queryName;
}
public String getQuery()
{
return query;
}
public void setQuery( String query )
{
this.query = query;
}
}
但问题是。。。当我尝试执行此操作时:
return (DBQuery) sessionFactory.getCurrentSession().byNaturalId(DBQuery.class).using( "query_name", name ).load();
出现以下错误:
org.hibernate.hibernateeexception:未为自然id属性XXX.DBQuery#queryName指定值
位于org.hibernate.event.spi.ResolveNaturalIdEvent.(ResolveNaturalIdEvent.java:102)
位于org.hibernate.event.spi.ResolveNaturalIdEvent.(ResolveNaturalIdEvent.java:52)
位于org.hibernate.internal.SessionImpl$BaseNaturalIdLoadAccessImpl.ResolvedNaturalid(SessionImpl.java:2466)
位于org.hibernate.internal.SessionImpl$naturadloadaccessimpl.load(SessionImpl.java:2581)
在这些变化之前,它运行良好。有什么建议吗?尝试一下,因为这里需要使用属性名而不是列名。它工作得更早,因为两者之间没有区别(name==name)
请不要对不应在浏览器中运行的代码使用代码段。请使用一个普通的代码块。@ Selic请考虑接受我的答案,如果它解决了你的问题。谢谢@Cerburs感谢您指出这一点-到目前为止我还不知道这一点,但这当然是有道理的。请不要将代码片段用于不应该在浏览器中运行的代码。请改用普通代码块。
return (DBQuery) sessionFactory.getCurrentSession().byNaturalId(DBQuery.class).using( "queryName", name ).load();