2014-02-19 80 views
4

我是Hibernate的新手。Hibernate:MySQLSyntaxErrorException:'字段列表'中的未知列'____'

我想獲取來自交易表中的所有記錄,

我得到了以下錯誤

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; 
} 
} 

休眠transactionBean:

@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();  
} 

什麼在我的代碼錯在何處?

編輯:這是在下面的映射tinyint列使用它會創建工作數據庫表的聲明

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$$ 
+0

添加您的表創建腳本,以驗證與Hibernate映射數據庫列名 –

+0

可能是你在拼寫錯誤的數據庫列名,首先檢查 –

+0

變化''從tinyint' deleted'列數據類型來'int'與'transactionId'列相同並且您的問題被解決 –

回答

0

您使用的0或1。

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

還有一個變,如果你需要嘗試, 您使用布爾值0,1所以你可以使用tinyint(1),這是足夠多的0,1。

你可以找到更多關於Hibernate映射here

+0

仍然無法與此映射 –

+1

正與 @Column(name =「刪除」) 私人詮釋刪除; 映射和 tinyint(4), 當我插入數據,數據插入正常(它不會給任何錯誤,而插入) –

+2

在'TransactionType'(這是ManyToOne在'交易')實體我錯過了刪除列。這就是爲什麼它給出了錯誤,但是Hibernate給出的ERROR「字段列表中的未知列transactio2_.deleted」,這就是爲什麼我感到困惑,它應該給錯誤像「未知列'tarnsactionType.deleted'在'字段列表'」 @ jubinPatel:thanx你的時間 –

3

我遇到了同樣的問題,如果我手動創建JPA實體。 只要確保你有每個吸氣功能的@Column註釋。

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

我最近遇到過類似的問題。在我的情況是缺少數據庫列