[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-4278) Polymorphic query on abstract function
Emmanuel Bernard (JIRA)
noreply at atlassian.com
Wed Oct 21 06:03:28 EDT 2009
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4278?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=34247#action_34247 ]
Emmanuel Bernard commented on HHH-4278:
---------------------------------------
It seems that the error lies somewhere else. The default access type is field and you put the @AccessType("property") on the property rather than the corresponding field. While this will be the behavior in JPA 2, it is not currently the behavior of Hibernate Annotations (check the reference documentation on @AccessType).
This explains the behavior.
Also using @AccessType("property") on both the superclass and the subclasses is just plain weird :) I don't know how the implementation would react to that.
> Polymorphic query on abstract function
> --------------------------------------
>
> Key: HHH-4278
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4278
> Project: Hibernate Core
> Issue Type: Bug
> Components: annotations
> Reporter: radu
> Priority: Blocker
>
> I have the following classes adnnotated with hibernate:
> <pre><code>
> @Entity
> @Inheritance(strategy=InheritanceType.JOINED)
> public abstract class Symbol
> implements Serializable {
>
> @Id
> @GeneratedValue(strategy = GenerationType.AUTO)
> private Integer id;
> @AccessType("property")
> public abstract String getCode();
>
> @AccessType("property")
> public abstract void setCode(String code);
> }
>
> @javax.persistence.Entity
> @AttributeOverride( name="code", column = @Column(name="field1") )
> public class Child1 extends Symbol {
>
> @Basic
> @Column(nullable = false)
> private String field1;
>
> @AccessType("property")
> public String getCode() {
> return getField1();
> }
>
> @AccessType("property")
> public void setCode(String code) {
> setField1(code);
> }
>
> public void setField1(String field1) {
> this.field1 = field1;
> }
> public String getField1() {
> return field1;
> }
> }
> @javax.persistence.Entity
> @AttributeOverride( name="code", column = @Column(name="field2") )
> public class Child2 extends Symbol {
>
> @Basic
> @Column(nullable = false)
> private String field2;
>
> @AccessType("property")
> public String getCode() {
> return getField2();
> }
>
> @AccessType("property")
> public void setCode(String code) {
> setField1(code);
> }
>
> public void setField1(String field2) {
> this.field2 = field2;
> }
> public String getField2() {
> return field2;
> }
> }
> </code></pre>
> As objectual rules about polymorphisms the following query should be valid and to retrieve correct field value:
> session.createQuery("from Symbol s where s.code = :code");
> but it give me the error:
> org.hibernate.QueryException: could not resolve property: code of: ...
> Please give some advices how to work around this problem if this situation does not follow hibernate concept or JPA specs and is not possible to implement it.
> Idea is that it should be possible to work at hight level without changing database or existing classes.
> Thanks
--
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.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list