如何禁用JoinTable的删除?

时间:2013-09-03 09:11:22

标签: jpa

我对JoinTable的禁用删除有问题。

@Entity 
class Employee
{
     @Id
     Long id;

     @ManyToOne( cascade = { CascadeType.REFRESH } )
     @JoinTable( name = "Employee2AddressOracleView",
                 joinColumns = @JoinColumn( name = "employee_id" ), 
                 inverseJoinColumns = @JoinColumn( name = "address_id" ) 
     private Address address;
)

员工地址在View中计算。它工作,我可以加载员工,但当我想删除员工JPA想从视图删除行。可以禁用此删除查询吗?

控制台中的JPA查询:

delete from Employee where employee_id = ?
delete from Employee2AddressOracleView where employee_id = ?

3 个答案:

答案 0 :(得分:0)

如果您使用的是EclipseLink,则可以使用DescriptorCustomizer将映射设置为readOnly。

答案 1 :(得分:0)

感谢您的回答。在我的情况下我找到了解决方案 hear

答案 2 :(得分:0)

已接受的答案具有指向休眠论坛的休眠链接。我设法在archive.org上拉出了链接。

解决方案是创建一个单独的实体,该实体代表映射到视图的联接表,而不是使用@JoinTable。

主要实体映射:

@Entity
@Table(name="Main")
   public class MainEntity {
   @Id
   @Column(name="id")
   private Integer id;

   @OneToOne
   @PrimaryKeyJoinColumn
   private JoinTableViewEntity joinEntity;
}

加入表视图实体映射:

@Entity
@Table(name="TableView")
public class JoinTableViewEntity {
   @Id
   @Column(name="id")
   private Integer mainEntityId;

   @ManyToOne
   @JoinColumn(name="other_id", updatable=false, insertable=false)
   private OtherEntity other;
}

它也可以不具有可更新和可插入的属性。