JPA双向映射取值问题解决办法

1.JPA双向映射取值问题解决办法

1)两个class entity:InboundNodeEntity 和InboundNodeDetailEntity 省略get ,set方法,并且这里的常量是定义在接口中的

@Entity
@Table(name=InboundNodeDbConstants.INBOUND_NODE_TABLE_NAME)
public class InboundNodeEntity implements Serializable
{

    /**  
     * serialVersionUID: Serial version UUID for InboundNodeEntity  
     * @see
     */
    private static final long serialVersionUID = 8875248360699928223L;

    @Id
    @GeneratedValue(generator = InboundNodeDbConstants.INBOUND_NODE_UUID_GENERATOR_NAME)
    @Column(name = InboundNodeDbConstants.GENERATOR_UUID_NAME)
    private String guid;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name=InboundNodeDbConstants.INBOUND_NODE_TYPE_GUID, nullable = false)
    private InboundType inboundType;

    @Column(name=InboundNodeDbConstants.INBOUND_NODE_NODE_GUID)
    private String nodeCode;

    @Column(name=InboundNodeDbConstants.INBOUND_NODE_CARDINALITY)
    private String cardinality;

    @Column(name=InboundNodeDbConstants.INBOUND_NODE_LEVEL)
    private int level;

    @Column(name=InboundNodeDbConstants.INBOUND_NODE_TABLE)
    private String tableName;

    @Column(name=InboundNodeDbConstants.INBOUND_NODE_IS_RULE_RELEVANT)
    private boolean ruleRelevant;

    @Column(name=InboundNodeDbConstants.INBOUND_NODE_RULE_OBJECT_NAME)
    private String ruleObjectName;

    @Column(name=InboundNodeDbConstants.INBOUND_NODE_ENABLED)
    private boolean enable;

    @Column(name=InboundNodeDbConstants.INBOUND_NODE_DESCRIPTION)
    private String description;

    @OneToMany(cascade={CascadeType.ALL}, mappedBy="inboundNode")
    private Set inboundNodeDetails = new HashSet
@Entity
@Table(name = InboundNodeDetailDbConstant.TABLE_INBOUND_NODE_DETAIL)
public class InboundNodeDetailEntity implements Serializable
{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator = "system-uuid")
    @Column(name = InboundNodeDetailDbConstant.GUID)
    private String guid;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = InboundNodeDetailDbConstant.NODE_GUID, nullable = false)
    private InboundNodeEntity inboundNode;

    @Column(name = InboundNodeDetailDbConstant.ELEMENT_CODE)
    private String elementCode;

    @Column(name = InboundNodeDetailDbConstant.DATA_TYPE_CODE)
    private String dataTypeCode;

    @Column(name = InboundNodeDetailDbConstant.IS_MANDATORY)
    private boolean isMandatory;

    @Column(name = InboundNodeDetailDbConstant.IS_RULERELEVANT)
    private boolean isRuleRelevant;

    @Column(name = InboundNodeDetailDbConstant.TABLE_NAME)
    private String tableName;

    @Column(name = InboundNodeDetailDbConstant.COLUM_NNAME)
    private String columnName;

    @Column(name = InboundNodeDetailDbConstant.IS_ENABLED)
    private boolean isEnabled;

    @Column(name = InboundNodeDetailDbConstant.IS_ALTERNETIVEKEY)
    private boolean isAlternativeKey;

    @Column(name = InboundNodeDetailDbConstant.IS_PARENT_KEY)
    private boolean isParentKey;

    @Column(name = InboundNodeDetailDbConstant.DESCRIPTION)
    private String description;

    @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "inboundNodeDetailEntity")
    private Set<InboundContentEntity> inboundContentEntity;
}

2)controller层去调用

@GetMapping(value = "/nodeDetail/all")
    public List<InboundNodeDetailEntityDto> getAllDetails()
    {
        return nodeDetailService.getAllDetails();
    }

3)service层,这里要通过DTO去打断这个互相取值的关联,这样就不会出现一直在取值的问题了!

@Autowired
private InboundNodeDetailEntityRepository nodeDetailRepository;

@Override
    public List<InboundNodeDetailEntityDto> getAllDetails()
    {
        List<InboundNodeDetailEntityDto> inboundNodeDetailEntities = new ArrayList<>();

        for (InboundNodeDetailEntity inboundNodeDetailEntity : nodeDetailRepository.findAll())
        {
            InboundNodeDetailEntityDto inboundNodeDetailEntity2 = new InboundNodeDetailEntityDto();
            List<InboundNodeDetailEntityParam> inboundNodeDetailEntityParams = new ArrayList<>();
            InboundNodeDetailEntityParam inboundNodeDetailEntityParam = new InboundNodeDetailEntityParam();
            inboundNodeDetailEntity2.setNodeGUID(inboundNodeDetailEntity.getInboundNode().getNodeCode());
            inboundNodeDetailEntity2.setGuid(inboundNodeDetailEntity.getGuid());
            inboundNodeDetailEntityParam.setAlternetiveKey(inboundNodeDetailEntity.getAlternativeKey());
            inboundNodeDetailEntityParam.setColumnName(inboundNodeDetailEntity.getColumnName());
            inboundNodeDetailEntityParam.setDataTypeCode(inboundNodeDetailEntity.getDataTypeCode());
            inboundNodeDetailEntityParam.setDescription(inboundNodeDetailEntity.getDescription());
            inboundNodeDetailEntityParam.setElementCode(inboundNodeDetailEntity.getElementCode());
            inboundNodeDetailEntityParam.setEnable(inboundNodeDetailEntity.getEnabled());
            inboundNodeDetailEntityParam.setMandatory(inboundNodeDetailEntity.getMandatory());
            inboundNodeDetailEntityParam.setParentKey(inboundNodeDetailEntity.getParentKey());
            inboundNodeDetailEntityParam.setRuleRelevant(inboundNodeDetailEntity.getRuleRelevant());
            inboundNodeDetailEntityParam.setTableName(inboundNodeDetailEntity.getTableName());
            inboundNodeDetailEntityParams.add(inboundNodeDetailEntityParam);
            //inboundNodeDetailEntity2.setInboundNodeDetailEntityParams(inboundNodeDetailEntityParams);
            inboundNodeDetailEntities.add(inboundNodeDetailEntity2);
        }
        return inboundNodeDetailEntities;
    }

4)Repository层

@Repository
public interface InboundNodeDetailEntityRepository extends JpaRepository<InboundNodeDetailEntity, String>
{

    List<InboundNodeDetailEntity> findAll();

    //List<InboundNodeDetailEntity> save(List<InboundNodeDetailEntity> inboundNodeDetailEntities);

    @SuppressWarnings("unchecked")
    InboundNodeDetailEntity save(InboundNodeDetailEntity inboundNodeDetailEntity);

    @Query(value = "select ine from InboundNodeDetailEntity ine where ine.inboundNode.nodeCode = ?1 and ine.elementCode = ?2")
    List<InboundNodeDetailEntity> findByNodeGuidAndElementCode(String nodeGuid, String elementCode);

    @Query(value = "select ine from InboundNodeDetailEntity ine join ine.inboundNode inNode where inNode.inboundType.typeCode=?1 and ine.inboundNode.nodeCode=?2")
    List<InboundNodeDetailEntity> findByTypeCodeAndNodeCode(String typeCode, String nodeCode);
    @Query(value = "select * from \"268073BE12C74139B231A938DA1AD6EE\".\"com.sap.ems.db.integration.data::InboundMapping.NodeElement\" element join \"268073BE12C74139B231A938DA1AD6EE\".\"com.sap.ems.db.integration.data::InboundMapping.Node\" node on element.\"NodeGUID\"=node.\"GUID\" WHERE ((\"NodeGUID\" = ?1) AND (\"IsAlternativeKey\" = true)) order by node.\"Level\" desc ",nativeQuery=true)
    List<InboundNodeDetailEntity> findAlternativeKeyByNodeGUID(String nodeGUID);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值