我有这样一个实体:
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Entity
public class EBase {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "e_id", nullable = false)
private Integer id;
@Column(name = "name")
protected String name;
@Column(name = "letters")
protected byte letters;
}
为了修改数据,我使用了另一个类:
@NoArgsConstructor
@AllArgsConstructor
public class E extends EBase {
public void setName(String name) {
super.name = name;
super.letters = (byte) name.length();
}
}
我知道这个问题可以用不同的方法来解决,我也不会像这样存储字符串的长度,但是把我的问题形象化是很好的,我想有一个只有Getter和Setter的实体,没有"真正的"其他方法,现在让我们创建一个实体:
public class Main {
public static void main(String[] args) {
final E e = new E();
e.setName("Test");
Database.getSession().save(e);
}
}
我的问题是:这可能吗?
我试过工厂课程
@RequiredArgsConstructor
@Getter
class EFactory {
private final EBase e;
public void setName(String name) {
e.setName(name);
e.setLetters((byte) name.length()); // setters in EBase implemented
}
public EBase get() {
return e;
}
}
与:
public class Main {
public static void main(String[] args) {
EBase e = new EBase();
e = new EFactory(e).setName("Test").get();
Database.getSession().save(e);
}
}
但这并不是很花哨,即使E不是实体,上面提到的解决方案也是可能的吗?
1条答案
按热度按时间vlju58qv1#
builder模式用于创建不可变的对象,例如:
现在,如果您使用的是hib,您希望将对象存储在SQL数据库中,并且,如果您可以存储对象而无需修改它们,那么大多数情况下,您将希望能够修改它们。
当然,你可以把所有二传手移到另一个类中,就像这样:
但我不明白你为什么要继承遗产。
也就是说,我建议您不要使用这两种模式,而只是在同一个类中声明getter和setter。