【问题标题】:Setter method in Entity classEntity 类中的 Setter 方法
【发布时间】:2016-06-14 15:54:10
【问题描述】:
@Entity
@Table
public class Page {

    ...

    private String URL;

    public void setURL(String URL) {
         this.URL = URL; 
    }

   public String getURL() {
       return URL
   }
}

URL 映射到表中的一个字段。我在 setURL() 方法中设置了断点,但程序在调试时没有中断;然后我把断点改成getURL()方法,断点就被触发了。

这是否意味着根本没有使用或触发 setURL 方法?前视图不接受用户输入作为 URL 值,并且 URL 是从数据库中检索的。如果是这样的话,我还需要 setURL() 方法吗?

【问题讨论】:

  • 我希望在您检索具有非空值的行时使用它
  • 有什么问题吗?我的整个程序看起来很正常。

标签: java hibernate jpa


【解决方案1】:

如果该字段已实际设置,但您无法在调试中捕捉到它,可能是因为它是通过反射而不是使用 setter 设置的。

【讨论】:

  • 预期的行为是什么?
  • 根据您在问题中发布的内容,您没有指定访问类型,也没有注释您的字段/方法,这将是反射。
【解决方案2】:

JPA 允许您将访问类型定义为字段或属性。默认情况下,这是根据 @Id 注释是放在字段上还是放在 getter 上来设置的。

如果访问类型是字段,那么 JPA 实现将使用反射直接使用字段,即使它们是 private

更多阅读: Other Answer, JPA Access Type

【讨论】:

  • 我有一个归档的“@Id private int id”,这就是为什么它是字段访问?另外,@Id 可以放在方法上吗?我从来没有见过。
  • 你也可以在类上显式设置@Access注解
猜你喜欢
  • 2012-12-12
  • 2014-09-24
  • 2014-06-14
  • 2023-03-28
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 2015-07-23
  • 2015-11-22
相关资源
最近更新 更多