Jpa 如何禁用JoinTable的删除?
我对禁用JoinTable的删除有问题Jpa 如何禁用JoinTable的删除?,jpa,Jpa,我对禁用JoinTable的删除有问题 @Entity class Employee { @Id Long id; @ManyToOne( cascade = { CascadeType.REFRESH } ) @JoinTable( name = "Employee2AddressOracleView", joinColumns = @JoinColumn( name = "employee_id" ),
@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;
}
它也可以在没有可更新和可插入属性的情况下工作。此问题的解决方案是: