首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibarnate @Generated注解不起作用

Hibarnate @Generated注解不起作用
EN

Stack Overflow用户
提问于 2018-02-09 00:06:08
回答 1查看 163关注 0票数 0

我有一个实体学生,其中我正在使用DB concat方法计算全名。正在创建具有名字和姓氏的全名。但是当我运行我的应用程序时,它给出了错误(下面会提到)。我使用hibernate和DB作为MySql:

代码语言:javascript
复制
@Entity
@Table(name = "students")
public class Student implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "studentId")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer studentId;
    @Column(name = "fname")
    private String fname;
    @Column(name = "lname")
    private String lname;

    @Generated(value = GenerationTime.ALWAYS)
    @Column(columnDefinition = "AS CONCAT(" + "    COALESCE(fname, ''), "
            + "    COALESCE(' ' + lname, ''), " + ")")
    private String fullName;

    //Getter Setter omitted
}

按如下方式保存学生实体:

代码语言:javascript
复制
public void addStudent(StudentBean studentBean)
{
    Student student=new Student();

    student.setFname(studentBean.getFname());
    student.setLname(studentBean.getLname());
    studentDAO.saveStudent(student);
}

我得到的错误如下所述:

代码语言:javascript
复制
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'student_.fullName' in 'field list'
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
com.mysql.jdbc.Util.getInstance(Util.java:384)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2838)
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2212)
org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82)
org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
com.sun.proxy.$Proxy60.executeQuery(Unknown Source)
org.hibernate.persister.entity.AbstractEntityPersister.processGeneratedProperties(AbstractEntityPersister.java:4365)
org.hibernate.persister.entity.AbstractEntityPersister.processInsertGeneratedProperties(AbstractEntityPersister.java:4338)
org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:80)
org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:272)
org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:304)
org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)
org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:128)
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
EN

回答 1

Stack Overflow用户

发布于 2018-02-09 01:30:29

代码语言:javascript
复制
  I think issues happens here

   @Column(columnDefinition = "AS CONCAT(" + "    
     COALESCE(fname, ''), "
            + "    COALESCE(' ' + lname, ''), " + ")")
    private String fullName;

    From exception I identified that there is no reference column with "fullName" in table student......

因此,首先检查数据库表并确认列"fullName“名称

然后将上面的代码块转换为

代码语言:javascript
复制
     @Column(name="fullName",
     columnDefinition = " 
     AS CONCAT(" + "    
     COALESCE(fname, ''), "
            + "    COALESCE(' ' + lname, ''), " + ")")
    private String fullName;

检查数据库并确认其fullName是否为空,并将列名放在上面的语句中

我希望它能起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48689824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档