【问题标题】:Session scoped property in an entity JPA实体 JPA 中的会话范围属性
【发布时间】:2019-09-05 14:28:12
【问题描述】:

我对 JPA 很陌生。我的问题是:是否可以在未保存在数据库中但为 SessionScoped 的实体中定义属性?

@Entity
@Table(name = "article_v_m")
public class Article implements Serializable {
    @Id
    @Column(name = "cart")
    private String ref;

    @Transient
    public static final List<String> STATUS_PUBLISHED = Collections.unmodifiableList(Arrays.asList("", "D", "R"));

    @Transient
    public static final List<String> STATUS_DEAD = Collections.unmodifiableList(Arrays.asList("M", "E", "V"));

    @Transient
    public static final List<String> STATUS_UPCOMING = Collections.unmodifiableList(Arrays.asList("A"));

    // I want this property to be SessionScoped
    // The problem is that it persists between sessions
    // I know this is because of the @Transient annotation
    @Transient
    public Double realDiscountPercent = 0.00;

    @Column(name = "isbn")
    private String isbn;

    @Column(name = "lart")
    private String title;

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getTitle() {
        if (fullTitle == null || fullTitle.isEmpty()) {
        return title;
    }
        return fullTitle;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Double getRealDiscountPercent() {
        return realDiscountPercent;
    }

    public void setRealDiscountPercent(Double realDiscountPercent) {
        this.realDiscountPercent = realDiscountPercent;
    }
}

目的是在视图之间检索 realDiscountPercent,但在会话关闭时重置它。我在市场视图中计算它,并希望在球童视图中获取此信息。现在,即使我断开连接并重新连接到另一个帐户,此值也保持不变。

【问题讨论】:

    标签: java jpa jakarta-ee


    【解决方案1】:

    对于会话范围内的属性,它需要是一个 singleton bean,以便您可以创建一个类似的:

    @Component
    @Scope("session")
    public class MyStringProvider implements Provider<String> {
    
       private String value = "something";
    
       public String get() {
           return this.value;
       }
    }
    

    然后你可以像这样访问它:

    @Autowired
    private Provider<String> myStringProvider;
    

    ...

    System.out.println(myStringProvider.get());
    

    【讨论】:

      猜你喜欢
      • 2011-09-02
      • 2014-12-02
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多