将@OneToMany从实体移动到嵌入式

时间:2017-09-25 16:22:59

标签: jpa associations embeddable

这是我的第一篇文章,所以我希望我能以正确的方式做到这一点。我已经搜索了两天的等效问题,但没有找到任何东西。

这是我做的: 我们有一个实体,包含(旁边的)下面的字段:

@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 ????

时,我是否遗漏了什么?

感谢您的帮助和耐心。

克里斯

0 个答案:

没有答案