gpt4 book ai didi

java - 如何停止为 BlazeDS 和 JPA 编写我不需要的 Java 属性 setter ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:02:58 24 4
gpt4 key购买 nike

BlazeDS 不会序列化属性,除非它同时具有 getter 和 setter。但是,我的许多 Java 属性都是只读的。因此,我现在必须添加 setter 来支持 Unmarshalling 过程。如果这些域对象的任何用户开始自己调用这些 setter ,就会破坏这些东西的值对象语义,并可能导致各种系统问题。

过去,我不得不经常这样做以支持 JPA 的某些方面,但从未喜欢过它。这是因为我们将 JPA 注释放在属性上而不是私有(private)字段上(以避免另一个问题)。

除了使用 Javadoc 来警告自己和他人,程序员还能做什么?

编辑:我应该补充一点,这些额外的 setter 不是这些对象实现的公共(public)接口(interface)的一部分……但它们仍然存在。

最佳答案

您可以尝试使用 @Access 注释。这用于逐列覆盖用于该类的访问类型。它还可以让您在进入数据库时​​弄乱东西,如下所示:

private String firstName;

@Access(AccessType.PROPERTY)
@Column(name="FIRST_NAME")
protected String getFirstNameForDatabase() {
return "Mr. " + this.firstName;
}

此示例不仅覆盖了用于该类的“FIELD”访问权限,而且还导致数据库提交时每次都在值前加上“Mr.”前缀。这也可能允许您声明满足您其他要求的“虚拟”getter/setter,而不会搞砸 JPA 提交和检索。尝试一下,看看这是否可用于为您的问题制定解决方案。

关于java - 如何停止为 BlazeDS 和 JPA 编写我不需要的 Java 属性 setter ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4370509/

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