gpt4 book ai didi

java - 使用 JPA 时构建器模式的最佳实践和实现

转载 作者:搜寻专家 更新时间:2023-11-01 01:33:11 24 4
gpt4 key购买 nike

我有一个适合构建器模式的类,有很多参数,我不想使用大量的伸缩构造器。

我的问题是这个类是一个 JPA 实体,这对我来说很新。

拥有私有(private)最终数据成员会引发错误,因为它们未在构造函数中初始化,据我所知,JPA 需要一个空的 protected 构造函数。

有人可以帮忙吗?一个例子会很棒,我已经包含了下面代码的一个基本示例,但它非常通用。为了节省空间/时间,我省略了许多访问器和数据成员。

  @Entity//(name= "TABLE_NAME") //name of the entity / table name
public class Bean implements Serializable {

private static final long serialVersionUID = 1L;

@Id //primary key
@GeneratedValue
Long id;
private final DateTime date;
private final String title;
private final String intro;


//used by jpa
protected Bean(){}

private Bean(Bean Builder beanBuilder){
this.date = beanBuilder;
this.title = beanBuilder;

this.intro = beanBuilder;
}

public DateTime getDate() {
return date;
}

public String getTitle() {
return title;
}

public static class BeanBuilder Builder{

private final DateTime date;
private final String title;

//private optional

public BeanBuilder(DateTime date, String title) {
this.date = date;
this.title = title;
}

public BeanBuilder intro(String intro){
this.intro = intro;
return this;
}

public BeanBuilder solution(String solution){
this.intro = solution;
return this;
}

public Bean buildBean(){
return new Bean(this);
}

}

}

最佳答案

标记为 final 的成员字段必须在构造期间分配一个值,并且该值是最终值(即不能更改)。因此,所有 声明的构造函数必须为所有 final 字段赋值。

这解释了您的编译器错误。

来自JLS :

A blank final instance variable must be definitely assigned at the end of every constructor of the class in which it is declared, or a compile-time error occurs (§8.8, §16.9).

关于java - 使用 JPA 时构建器模式的最佳实践和实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31885326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com