我对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 = ?
答案 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;
}
它也可以不具有可更新和可插入的属性。