使休眠忽略未映射的类变量[重复]

Posted

技术标签:

【中文标题】使休眠忽略未映射的类变量[重复]【英文标题】:Make hibernate ignore class variables that are not mapped [duplicate] 【发布时间】:2011-06-07 10:46:16 【问题描述】:

我认为 hibernate 只考虑使用 @Column 注释的类变量。但奇怪的是,今天当我添加一个变量(未映射到任何列,只是我在类中需要的一个变量)时,它试图将该变量作为列名包含在 select 语句中并引发错误 -

“字段列表”中的未知列“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;

为什么会这样?!

【问题讨论】:

非常抱歉...我是新手。会为我所有的帖子做这件事!谢谢你的告知。 @Tunaki 不,这不完全是问题“JPA 在持久性期间忽略字段的最快方法?”的重复。 (***.com/questions/1281952/…) 这张票是关于 Hibernate 的,另一张是在谈论 JPA。 @hese 你的基类有一些变量吗?如果是,hibernate 会忽略它们还是考虑它们? 【参考方案1】:

JPA 将使用类的 所有 属性,除非您特别用 @Transient 标记它们:

@Transient
private String agencyName;

@Column 注释完全是可选的,可以让您覆盖自动生成的列名。而且@Columnlength属性只在自动生成表定义时使用,对运行时没有影响。

【讨论】:

也可以使用java修饰符transient代替注解 有没有可能只在持久化的时候才忽略这个变量,但是从DB取数据的时候,可以考虑该字段? 感谢@CodeMed 下面的回答,不要导入错误的包:import javax.persistence.Transient;【参考方案2】:

对于通过搜索引擎找到此帖子的人来说,此问题的另一个可能原因是导入了错误的包版本 @Transient。确保导入 javax.persistence.transient 而不是其他包。

【讨论】:

谢谢。我想知道它应该是豆子还是持久性。 谢谢,正在使用 org.springframework.data.annotation.Transient 并且很困惑为什么它不起作用。 谢谢!!!有趣,在想,我真的需要另一个谷歌搜索吗,接受的答案很可能......【参考方案3】:

@Transient 放在带有私有字段的吸气剂上对我有用。

private String name;

    @Transient
    public String getName() 
        return name;
    

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

【讨论】:

将@Transient 放在getter 级别也对我有用。 和声明变量@Transient没有区别吗? @ADTC 取决于所使用的库,有些人对 getter/setter 上的注释犹豫不决,其他人则不(最近在 Moxy 和 Jackson 上注意到这一点;Moxy 很棒,因为它会无缘无故地失败),有些人不会t 喜欢将它们混合在一起(在属性和 getter/setter 之间)。一定会喜欢的。

以上是关于使休眠忽略未映射的类变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

休眠的动态类

JavaFx 元素未绑定到 fx:id 上的控制器变量 [重复]

PHP中未定义的类变量

未定义变量时计算css高度[重复]

java中的final类是不是与所有方法都声明为final且所有变量都声明为private的类相同[重复]

您可以在 Java 中访问私有变量,而无需来自非内部类的类的 getter [重复]