1

我有一个实体类

    @Entity
    @Table(name = "rule")
    public class Rule implements Cloneable, Serializable, IPojoGenEntity, IRule, SequencedEntity {

    private String name;

    private Service service;

    //getter .. setter for service and name

      public String getServiceName() {
        return (this.service.getName());
      }

     public void setServiceName(String servicename) {
       this.service.setName(servicename);
     }

    }

我通过 RulClass 对象获取服务名称时遇到异常

public String getServiceName() {
        return (this.service.getName());
      }

堆栈跟踪

Caused by: com.ibm.db2.jcc.b.SqlException: "RULE0_.SERVICENAME" is not valid in the context where it is used.
    at com.ibm.db2.jcc.b.fg.e(fg.java:1596)
    at com.ibm.db2.jcc.b.fg.a(fg.java:1206)
    at com.ibm.db2.jcc.a.gb.g(gb.java:140)
    at com.ibm.db2.jcc.a.gb.a(gb.java:39)
    at com.ibm.db2.jcc.a.w.a(w.java:34)
    at com.ibm.db2.jcc.a.vb.g(vb.java:139)

我们可以在实体类中使用这样的 getter 和 setter 吗?

我正在使用休眠、弹簧、DB2、IBM WebSphere

4

3 回答 3

1

@Transient如果您不想存储它,您应该按照提到的方式制作它

或者

为 getter 定义 @javax.persistence.Column(name = "service_id") 字段注释,让 hibernate 知道要使用哪个列。

或者

重命名 DB 以使服务字段“SERVICENAME”使用默认列名

于 2013-02-12T08:31:16.617 回答
0

Transient注释告诉 Hibernate 忽略一个字段。所以:

@Transient
private Service service;

来自非常相似的 SO 问题:Make hibernate ignore class variables that is not mapped

于 2013-02-12T07:32:36.830 回答
0

由于serviceName不是 Rule 类的成员,因此方法名称存在问题。名字不能像

getServiceName
setServiceName

相反,它应该不是 getset prefix

fetchServiceName
addServiceName
于 2013-02-13T05:47:21.150 回答