Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 如何禁用JoinTable的删除?_Jpa - Fatal编程技术网

Jpa 如何禁用JoinTable的删除?

Jpa 如何禁用JoinTable的删除?,jpa,Jpa,我对禁用JoinTable的删除有问题 @Entity class Employee { @Id Long id; @ManyToOne( cascade = { CascadeType.REFRESH } ) @JoinTable( name = "Employee2AddressOracleView", joinColumns = @JoinColumn( name = "employee_id" ),

我对禁用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;
)
在视图中计算员工的地址。它可以工作,我可以加载Employee,但当我想要删除Employee时,JPA想要删除视图中的行。是否可以禁用此删除查询

控制台中的JPA查询:

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

如果您使用的是EclipseLink,您可以使用描述符编辑器将映射设置为只读。

谢谢您的回答。在我的案例中,我找到了解决方案:

公认的答案有一个链接,指向已死亡的hibernate论坛。我设法把链环拔了出来

解决方案是创建一个表示联接表的单独实体,映射到视图,而不是使用@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;
}
连接表视图实体映射:

@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;
}

它也可以在没有可更新和可插入属性的情况下工作。

此问题的解决方案是: