2017-09-01 91 views
0

删除操作我看看下面的实体:嵌入式对象春天JPA

@Entity(name = "USRGRP_MAP") 
public class UserGroupMapping { 

    @Id 
    @Column(name = "USRGRP_ID") 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_GRP_MAP_SEQ") 
    @SequenceGenerator(sequenceName = "usrgrp_map_seq",allocationSize = 1,name = "USER_GRP_MAP_SEQ") 
    private Long mappingId; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID") 
    private User user; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "USR_GRP_ID", referencedColumnName = "USR_GRP_ID") 
    private UserGroup group; 

    @Column(name = "USR_USRGRP_ACT") 
    private String userGroupAct; 

    getter/setters 
} 

@Entity(name = "USER") 
public class User { 

    @Id 
    @Column(name = "USER_ID") 
    private Long userId; 

    @Column(name = "LOGIN_ID") 
    private String userName; 

    getter/setters 
} 

@Entity(name = "USR_GRP") 
public class UserGroup { 

    @Id 
    @Column(name = "USR_GRP_ID") 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_GRP_SEQ") 
    @SequenceGenerator(sequenceName = "usr_grp_seq",allocationSize = 1,name = "USER_GRP_SEQ") 
    private long groupId; 

    @Column(name = "GRP_NM") 
    private String groupName; 

    @Column(name = "GRP_DESC") 
    private String groupDesc; 

    getter/setters 
} 

UserGroupMapping包含有许多与用户和组的一个关系。 现在我想要做UserGroupMapping为我创造库如下CRUD操作:

public interface UserGroupMappingRepository extends JpaRepository<UserGroupMapping, Long> { 
    List<UserGroupMapping> findByGroup(UserGroup group); 
    List<UserGroupMapping> findByUser(User user); 
} 

现在我想要写,删除操作(特别是用户和组)上UserGroupMapping而不删除用户和USR_GRP中的任何条目表,只需要从USRGRP_MAP表中删除条目。

我试图使用本机查询来实现它:

@Query(value = "delete from USR_USRGRP_MAP where user_id = :userId and usr_grp_id = :groupId",nativeQuery = true) 
    void deleteUserGroupMappingByUserAndGroup(@Param("userId") Long userId, @Param("groupId") Long groupId); 

面对异常无效的SQL语法,但在SQL Developer中查询做工精细。

下面是我的服务类:

@Service 

public class UserGroupMappingServiceImpl implements UserGroupMappingService{ 

    @Autowired 
    private UserGroupMappingRepository repository; 


    @Override 
    public void deleteUserGroupMapping(Long userId, Long groupId) { 
     repository.deleteUserGroupMappingByUserAndGroup(userId,groupId); 
    } 


} 

可能有人建议删除而不删除用户和组UserGroupMapping进入正确的方法是什么?

下面是USRGRP_MAP表:

USRGRP_ID USER_ID USR_USRGRP_ID USR_USRGRP_ACT 
------------- ---------- ------------- - 
      41  306106   41 Y 
      14  108527   14 Y 
      8  295597    8 N 
      10  296518   10 Y 
      11  295597   11 Y 

在此先感谢。

+0

请提供完整的堆栈跟踪 –

回答

1

试图改变 @Query(值= “从USR_USRGRP_MAP删除其中USER_ID =:帐户及usr_grp_id =:的groupId”,nativeQuery = TRUE) 无效deleteUserGroupMappingByUserAndGroup(@Param( “用​​户id”)长期用户id,@Param( “groupId”)Long groupId);

向该:

@Modifying

@Query(值= “从USR_USRGRP_MAP删除其中USER_ID =:帐户及usr_grp_id =:的groupId”,nativeQuery =真) 空隙deleteUserGroupMappingByUserAndGroup(@Param (“userId”)long userId,@Param(“groupId”)Long groupId);

干杯

〜周华健

+0

添加@Modifying给出了以下异常: “异常”: “org.springframework.dao.InvalidDataAccessApiUsageException”, “消息”:“执行的更新/删除查询;嵌套异常是javax.persistence.TransactionRequiredException:执行更新/删除查询“, – Abhij

+0

您可以粘贴使用查询的代码 – vRaptor