这是我的第一篇文章,所以我希望我能以正确的方式做到这一点。我已经搜索了两天的等效问题,但没有找到任何东西。
这是我做的: 我们有一个实体,包含(旁边的)下面的字段:
@Entity
@Access(AccessType.FIELD)
@Table(name = "component")
public class Component {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
.
.
@OneToMany
@JoinTable(name = "component_dokumentation",
joinColumns = @JoinColumn( name = "component_id" ),
inverseJoinColumns = @JoinColumn(name = "dokumentation_id"))
private Set<FileType> dokumentation;
private Long keySisMf = 0L;
.
.
// Getter and Setter and stuff
}
经过一年的使用,我们发现,我们的实体变得太大,我们必须使用DTO对象将数据传输到客户端,修改它们并将它们返回到服务器。为此,我们建模了一个可嵌入的Entity ComponentAttributes。
现在它看起来像:
@Entity
@Access(AccessType.FIELD)
@Table(name = "component")
public class Component {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
.
.
@Embedded
private ComponentAttributes componentAttributes;
.
.
}
@Embeddable
@Access(AccessType.FIELD)
public class ComponentAttributes {
private static final long serialVersionUID = 1L;
@OneToMany
@JoinTable(name = "component_dokumentation",
joinColumns = @JoinColumn( name = "component_id" ),
inverseJoinColumns = @JoinColumn(name = "dokumentation_id"))
private Set<FileType> dokumentation;
private Long keySisMf = 0L;
.
.
// Getter and Setter and stuff
}
我们没有更改数据库中的任何内容。我们在设置文档的值时遇到了问题。字段keySisMf不是问题。问题只与文档有关(我必须补充一点,FileType只是一个由id和几个字符串组成的基本实体,所以没什么特别的)。获取值并将其传输到客户端是快速和正确的。告诉服务器更改keySisMf不是问题。告诉服务器添加或删除FileType实例根本不起作用。没有错误,但没有变化。
我们已经记录了JPA生成的SQL,并且没有为component.getComponentAttributes()。setDokumentation(fileSet)生成SQL。
我们使用带有ORACLE数据库的Glassfish 4.1.1服务器。将Dokumentation从Component移动到ComponentAttributes ????
时,我是否遗漏了什么?感谢您的帮助和耐心。
克里斯