2012-04-19 627 views
1

我在JPA實體類中遇到問題。這個實體工作完美,因爲它應該,但今天 我添加了另一個字段(一個簡單的字符串,數據庫中的varchar(255)NOT NULL)。當我試圖堅持一個新的實體,我得到一個當持久化實體時,JPA忽略字段

java.sql.SQLException: Field 'companyLogoUrl' doesn't have a default value 

嗯,這是真的。該列沒有默認值。但在我的代碼中,我爲它設置了值。當我看看生成的插入語句時,該字段不存在。

INSERT INTO COMPANY (ACCOUNTNUMBER, ACCOUNTOWNER, BANK, BANKCODE, CHANGEDAT, 
COMPANYNAME, CREATEDAT, addressId) 

變量的名稱與列名相匹配,因此沒有可能導致錯誤的註釋。它被視爲就像其他領域/專欄工作正常。

在此先感謝您的幫助!

編輯:

下面是類(一個常規級):

@Entity 
class Company extends KupiumEntity 
{ 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
final int companyId 

String companyName 
String bank 
String bankCode 
String accountNumber 
String accountOwner 

String companyLogoUrl 


@ManyToOne(cascade=CascadeType.PERSIST) 
@JoinColumn(name="addressId") 
Address address = new Address() 


@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name="companyId") 
List<Invoice> invoices = new ArrayList<Invoice>() 


@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name="companyId") 
List<Kupon> kupons = new ArrayList<Kupon>() 


@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name="mandatorId") 
List<Mandator> mandators = new ArrayList<Mandator>() 


@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name="companyAppId") 
List<CompanyApp> companyApps = new ArrayList<CompanyApp>() 
} 

編輯2: 很抱歉的混亂。表中的字段和列名爲'companyLogoUrl'

+0

請發佈您的實體類。 – 2012-04-19 20:07:50

+0

我們需要看你的Java代碼/映射。現有和新字段之間必須有*一些*區別,比如缺少註釋,getter/setter,不正確的修飾符... – 2012-04-19 20:07:57

+0

看起來這個類看起來不太符合您生成的SQL ... CHANGEDAT? CREATEDAT?你確定一切都在這裏的同一頁嗎? – 2012-04-19 20:14:07

回答

1

嗯,我今天解決了這個問題,但我仍然不知道原因是什麼。

我試圖運行我的unitTests,這些告訴我他們在這個項目中找不到pom.xml。這有點令人驚訝,因爲它不是Maven項目,所以我不明白他爲什麼甚至在尋找它。無論如何,我創建了一個新項目,將源代碼從舊版本複製到新版本,並且......它的工作原理。

我仍然覺得很難弄清楚爲什麼日食甚至會考慮它作爲一個Maven項目(否則爲什麼他找一個pom.xml?)

我又約了名的混亂表示歉意字段/列。謝謝你的幫助,夥計們!