如何停止为BlazeDS编写Java属性设置程序&;我不喜欢的JPA';你不想要吗?

如何停止为BlazeDS编写Java属性设置程序&;我不喜欢的JPA';你不想要吗?,java,apache-flex,jpa,javadoc,blazeds,Java,Apache Flex,Jpa,Javadoc,Blazeds,BlazeDS不会序列化属性,除非它同时具有getter和setter。但是,我的许多Java属性都是只读的。因此,我现在必须添加setter来支持解组过程。如果这些域对象的任何用户开始自己调用这些setter,就会破坏这些对象的值对象语义,并可能导致各种系统问题 过去我不得不做很多这样的事情来支持JPA的某些方面,但我从来都不喜欢它。这是因为我们将JPA注释放在属性而不是私有字段上(以避免另一个问题) 除了使用Javadoc警告自己和其他人之外,程序员还能做什么 编辑:我应该补充一点,这些额外

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


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

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


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

您可以尝试使用
@Access
注释。这用于逐列重写用于类的访问类型。当它进入数据库时,它还可以让你处理一些东西,比如:

private String firstName;

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

这个例子不仅覆盖了类所使用的“FIELD”访问,而且每次都会导致数据库在值前面加上“Mr.”前缀进行提交。这还允许您声明满足其他需求的“伪”getter/setter,而不会破坏JPA提交和检索。尝试一下,看看这是否可以用来为您的问题制定解决方案。

您有几个选择:使用您自己的序列化机制或使用BlazeDS版本4。我写了一篇与此相关的小文章,也许它可以帮助你。链接是。

“这是因为我们将JPA注释放在属性上而不是私有字段上(以避免另一个问题)”-另一个问题是什么?问题是在映射的Superclase中的私有字段在其类型中使用了Java泛型(例如,
private List myProp;
)。请参阅这些声明不支持JPA注释。在我的例子中,在其中一些属性上使用AccessType.Field可能是摆脱不需要的JPA设置程序的一种方法。关于BlazeDS二传手有什么想法吗?对不起,我没有BlazeDS experienceGreat文章。关于BlazeDS 4,是否有发布说明的web链接?另外,我看到SpringFlex1.5.0-M1与BlazeDS 4一起工作,但我在任何Maven存储库中都找不到它们……我需要手动将其添加到我的Nexus吗?谢谢没关系…找到了发行说明和关于支持只读属性的注释: