2011-01-11 57 views
149

我認爲hibernate只考慮使用@Column註釋的類變量。但今天很奇怪,當我加入一個變量(即沒有映射到任何列,只是一個變量,我需要在類),它試圖在select語句作爲列名變量,引發錯誤 -讓hibernate忽略未映射的類變量

未知列在「字段列表」

我的班「team1_.agencyName」 -

@Entity 
@Table(name="team") 
public class Team extends BaseObject implements Serializable { 

@Id @GeneratedValue(strategy=GenerationType.AUTO) 
private Long id; 

@Column(length=50) 
private String name; 

@Column(length=10) 
private String code; 

@Column(name = "agency_id") 
private Long agencyId; 

private String agencyName; //note: not annotated. 

} 

僅供參考......我用另一大類上面類多對多映射

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(
     name="user_team", 
     joinColumns = { @JoinColumn(name="user_id") }, 
     inverseJoinColumns = @JoinColumn(name="team_id") 
)  
public Set<Team> getTeams() { 
    return teams; 
} 

這是怎麼回事?

+3

很抱歉...我是這個新手。將爲我的所有帖子做到這一點!感謝告訴。 – hese 2011-01-12 14:51:28

+0

@Tunaki不,這與「JPA在持久性期間忽略字段的最快方式?」這個問題不完全相同。 (http://stackoverflow.com/questions/1281952/jpa-fastest-way-to-ignore-a-field-during-persistence)這張票是關於Hibernate的,另一張是談論JPA。 – Yuci 2017-03-23 15:19:14

回答

320

JPA將使用所有性能之類的,除非你專門與@Transient標記它們:

@Transient 
private String agencyName; 

@Column註釋純粹是可選的,並且是有讓你忽略自動生成的列名。此外,@Columnlength屬性僅用於自動生成表定義時,它對運行時沒有影響。

55

對於誰通過搜索引擎找到這個帖子人來說,這個問題的另一個可能的原因是,從進口的@Transient錯包的版本。確保你導入javax.persistence.transient而不是其他包。

+1

謝謝。我想知道它應該是豆還是持久。 – Nasir 2014-11-10 20:14:40

18

@Transient放在吸氣劑上,私人領域爲我工作。

private String name; 

    @Transient 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    }