【问题标题】:Hibernate : MySQLSyntaxErrorException: Unknown column ' ____ ' in 'field list'休眠:MySQLSyntaxErrorException:“字段列表”中的未知列“____”
【发布时间】:2014-03-19 05:31:50
【问题描述】:

我是 Hibernate 的新手。

我想从事务表中获取所有记录,

我收到以下错误

 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column transactio2_.deleted' in 'field list'

虽然deleted 列存在于表中

实体类:

@Entity
@Table(name = "transaction")
public class Transaction implements Comparable<Transaction>
{
@Id
@GeneratedValue
@Column(name = "transactionId")
private int transactionId;

@Column(name = "date")
private Date date;

@Column(name = "amount")
private BigDecimal amount;

@ManyToOne
@JoinColumn(name = "transactionTypeId")
private TransactionType transactionType;

@ManyToOne
@JoinColumn(name = "userId")
private User user;

@Column(name = "operation")
private String operation;

@Column(name = "lastUpdate")
private Date lastUpdate;

@Column(name = "deleted")
private int deleted;

@Column(name = "remark")
private String remark;

public Transaction()
{
    super();
}

@Override
public int compareTo(Transaction c)
{
    if (getTransactionId() < c.getTransactionId())
    {
        return -1;
    }
    if (getTransactionId() > c.getTransactionId())
    {
        return 1;
    }
    return 0;
}

public Date getLastUpdate()
{
    return lastUpdate;
}

public void setLastUpdate(Date lastUpdate)
{
    this.lastUpdate = lastUpdate;
}

public User getUser()
{
    return user;
}

public void setUser(User user)
{
    this.user = user;
}

public int getDeleted()
{
    return deleted;
}

public void setDeleted(int deleted)
{
    this.deleted = deleted;
}

public int getTransactionId()
{
    return transactionId;
}

public void setTransactionId(int transactionId)
{
    this.transactionId = transactionId;
}

public Date getDate()
{
    return date;
}

public void setDate(Date date)
{
    this.date = date;
}

public BigDecimal getAmount()
{
    return amount;
}

public void setAmount(BigDecimal amount)
{
    this.amount = amount;
}

public TransactionType getTransactionType()
{
    return transactionType;
}

public void setTransactionType(TransactionType transactionType)
{
    this.transactionType = transactionType;
}

public String getOperation()
{
    return operation;
}

public String getRemark()
{
    return remark;
}

public void setRemark(String remark)
{
    this.remark = remark;
}

public void setOperation(String operation)
{
    this.operation = operation;
}
 }

休眠事务Bean:

@ManagedBean
@ViewScoped
public class TransactionBean implements Serializable
{

    ArrayList<Transaction> transactionList = new ArrayList<>();

    /**
   * Public Constructor
    */
public TransactionBean()
{
     Session session = HibernateUtil.getSessionFactory().openSession();
    @SuppressWarnings("unchecked")
    transactionList = (ArrayList<Transaction>) session.createCriteria(Transaction.class).list();     
}

我的代码出了什么问题?

编辑:这里是数据库表的创建语句

 delimiter $$

   CREATE TABLE `transaction` (
      `transactionId` int(11) NOT NULL AUTO_INCREMENT,
      `date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `amount` decimal(10,2) DEFAULT NULL,
      `transactionTypeId` int(11) NOT NULL,
      `operation` varchar(45) DEFAULT NULL,
      `lastUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `userId` int(11) NOT NULL,
      `deleted` tinyint(4) NOT NULL DEFAULT '0',
      `remark` varchar(450) DEFAULT NULL,
        PRIMARY KEY (`transactionId`),
        KEY `fk_transaction_1` (`userId`),
        KEY `fk_transaction_2` (`transactionTypeId`),
        CONSTRAINT `fk_transaction_1` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON     DELETE NO ACTION ON UPDATE NO ACTION,
       CONSTRAINT `fk_transaction_2` FOREIGN KEY (`transactionTypeId`) REFERENCES   `transaction_type` (`transactionTypeId`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=latin1$$

【问题讨论】:

  • 添加您的表创建脚本以使用休眠映射验证数据库列名
  • 可能是你在db中拼错了列名,先检查一下
  • deleted 列数据类型从tinyint 更改为inttransactionId 列相同,您的问题就解决了
  • 我使用 tinyint 因为我要设置值,只有零(0)或一(1)
  • 然后在映射中尝试boolean。如果您只需要 0 或 1,再进行一次更改 tinyint(1)

标签: java hibernate hibernate-criteria


【解决方案1】:

我最近遇到了类似的问题。就我而言,它缺少数据库列

【讨论】:

    【解决方案2】:

    如果我手动创建 JPA 实体,我也会遇到同样的问题。 只需确保每个 getter 函数都有 @Column 注释。

    @Column(name = "deleted")
    public int getDeleted()
    {
        return deleted;
    }
    

    【讨论】:

      【解决方案3】:

      您在 tinyint 列中使用 0 或 1 使用下面的映射将起作用。

      @Column(name = "deleted")
      private boolean deleted;
      

      如果您需要尝试,再进行一项更改, 您正在使用布尔值 0,1,因此您可以使用 tinyint(1),这对于 0,1 来说已经足够了。

      你可以找到更多关于休眠映射here

      【讨论】:

      • with @Column(name = "deleted") private int 被删除; mapping 和 tinyint(4),当我插入数据时,数据插入正常(插入时不会出现任何错误)
      • 在“TransactionType”(即“Transaction”中的 ManyToOne)实体中,我错过了已删除的列。这就是它给出错误的原因,但是 Hibernate 给出了错误“'字段列表'中的未知列 transactio2_.deleted'”,这就是我感到困惑的原因,它应该给出错误,例如“'字段列表'中的未知列'tarnsactionType.deleted'” @ jubinPatel:感谢您的时间
      猜你喜欢
      • 2015-05-28
      • 2016-10-07
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2013-02-27
      • 2017-06-27
      相关资源
      最近更新 更多