- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个继承自 Person 和 OrganizationalUnit 的 Employee 实体:
组织单位:
@MappedSuperclass
public abstract class OrganizationalUnit implements Serializable
{
@Id
private Long id;
@Basic( optional = false )
private String name;
public Long getId()
{
return this.id;
}
public void setId( Long id )
{
this.id = id;
}
public String getName()
{
return this.name;
}
public void setName( String name )
{
this.name = name;
}
// ...
}
人:
@MappedSuperclass
public abstract class Person extends OrganizationalUnit
{
private String lastName;
private String firstName;
public String getLastName()
{
return this.lastName;
}
public void setLastName( String lastName )
{
this.lastName = lastName;
}
public String getFirstName()
{
return this.firstName;
}
public void setFirstName( String firstName )
{
this.firstName = firstName;
}
/**
* Returns names of the form "John Doe".
*/
@Override
public String getName()
{
return this.firstName + " " + this.lastName;
}
@Override
public void setName( String name )
{
throw new UnsupportedOperationException( "Name cannot be set explicitly!" );
}
/**
* Returns names of the form "Doe, John".
*/
public String getFormalName()
{
return this.lastName + ", " + this.firstName;
}
// ...
}
员工实体:
@Entity
@Table( name = "EMPLOYEES" )
@AttributeOverrides
(
{
@AttributeOverride( name = "id", column = @Column( name = "EMPLOYEE_ID" ) ),
@AttributeOverride( name = "name", column = @Column( name = "LASTNAME", insertable = false, updatable = false ) ),
@AttributeOverride( name = "firstName", column = @Column( name = "FIRSTNAME" ) ),
@AttributeOverride( name = "lastName", column = @Column( name = "LASTNAME" ) ),
}
)
@NamedQueries
(
{
@NamedQuery( name = "Employee.FIND_BY_FORMAL_NAME",
query = "SELECT emp " +
"FROM Employee emp " +
"WHERE emp.formalName = :formalName" )
}
)
public class Employee extends Person
{
@Column( name = "EMPLOYEE_NO" )
private String nbr;
// lots of other stuff...
}
然后,我尝试通过正式姓名查找员工,例如“Doe, John”使用上面的查询:
SELECT emp
FROM Employee emp
WHERE emp.formalName = :formalName
但是,这在部署到 EclipseLink 时给了我一个异常(exception):
Exception while preparing the app : Exception [EclipseLink-8030] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [Employee.FIND_BY_CLIENT_AND_FORMAL_NAME: SELECT emp FROM Employee emp JOIN FETCH emp.client JOIN FETCH emp.unit WHERE emp.client.id = :clientId AND emp.formalName = :formalName], line 1, column 115: unknown state or association field [formalName] of class [de.bnext.core.common.entity.Employee].
Local Exception Stack:
Exception [EclipseLink-8030] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [Employee.FIND_BY_CLIENT_AND_FORMAL_NAME: SELECT emp FROM Employee emp JOIN FETCH emp.client JOIN FETCH emp.unit WHERE emp.client.id = :clientId AND emp.formalName = :formalName], line 1, column 115: unknown state or association field [formalName] of class [de.bnext.core.common.entity.Employee].
问题:
怎么了?是否禁止在 JPQL 中使用“人工”属性,这里是 WHERE 子句?这里有什么场所?
我多次检查了大小写和拼写,我运气不好。
最佳答案
您的类没有formalName 的映射,因此不能在查询中使用它。您只能访问查询中的映射。无论如何,数据库中没有 FormalName,所以我不知道如何使用它。
您的查询需要更改为访问名字和姓氏,就像您尝试在 getFormalName 代码中执行的操作一样:
"SELECT emp FROM Employee emp JOIN FETCH emp.client JOIN FETCH emp.unit WHERE emp.client.id = :clientId AND CONCAT(CONCAT(emp.lastName, ', '), emp.firstName) = :formalName"
请注意,您的 OrganizationalUnit 类在其字段上有注释,因此只有字段才会具有默认映射。这意味着您的表中将包含名字、姓氏和名称字段,尽管 Person 中的 getName 将名称定义为 this.firstName + ""+ this.lastName。我建议删除 Person 中的firstName/lastName 字段并改为处理名称字段,或者您可以从 OrganizationalUnit 中删除名称字段并让子类以自己的方式处理 get/setname 访问器。
关于java - JPQL : unknown state or association field (EclipseLink),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515279/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我有四个模型类: class Group :event_producer end class PersonalBlog :event_producer end class Event true
将应用程序从Rails 4.2.9升级到Rails 5.2.1。 通过大部分令人讨厌的部分,更新了依赖关系和诸如此类的东西,最终使应用程序在console中运行,现在尝试访问server上的页面。加载
我的 EntityDefinition 中有一个关联: ... class ParentEntityDefinition extends EntityDefinition { ...
我不确定为什么这个关联无效 class Tag < ActiveRecord::Base has_and_belongs_to_many :routes end class Route < Act
我有以下关联。 PropertyOwner 是一个连接模型,它属于一个属性(property),多态地属于一个所有者,在下面的例子中是一个 ForeclosureDefense。一切正常,直到我拥有
我有一份有很多发票的工作,一张发票属于一份工作。我想查询第一张发票在某个日期范围内的工作。我有这个查询: @jobs = Job.joins(:invoices). where("invoices
我有这样的关系:用户可以拥有零只或一只狗,但狗必须属于某人。 # dog.rb class Dog { joins(:dog) } # To get records without a dog,
在我的 Rails 4 应用程序中,我有以下模型: User has_many :administrations has_many :calendars, through: :administrati
我见过的所有示例,包括文档都建议按关联过滤应使用以下语法 [contrived exampled] User.findAndCountAll({ include: [ {
我有一个下拉列表(HTML 选择框),它从这个 MySQL 查询中获取值: "SELECT cdID, cdTitle FROM CD ORDER BY cdID" 然后将结果存储在关联数组中,然后将
我是 Ruby ON Rails 新手,我的应用有 3 个模型 class User < ActiveRecord::Base has_one :user_hobby has_one :user_
我有三个模型,每个模型都有以下关联: class Model1 :model1 # will this work? is there any way around this? end class
我有一个带有帖子和标签的数据库。我想找到的帖子,只包含一个标签与一个特定的TagID,根本没有其他标签。下面的代码可以工作,但它需要服务器手动过滤结果,这将使分页变得困难。有谁有可以做到这一点的直接查
任何人都知道如何避免 PLS-00312 错误? “PLS-00312:位置参数关联可能不遵循命名关联” 我得到这个是因为下面一行: AttachList=> v_est_proc_name||'_E
我有以下工厂定义。 Factory.define :status do |f| end Factory.define :my_status , :parent => :status do |f|
我有 2 个具有 1:M 关联的模型,定义如下: var inventory = sequelize.define("Inventory",{**model definition**}; var tr
假设这个模式: var user = sequelize.define('user', { username: Sequelize.STRING, email: Sequelize.S
我正在使用 Apple 的工具进行应用站点关联验证,该工具位于此处:https://search.developer.apple.com/appsearch-validation-tool 它给了我错
实体\识别 /** * @ORM\Entity * @ORM\Table(name="c_rcgntn") */ class Recognition { /** * @ORM\
我是一名优秀的程序员,十分优秀!