如何在Springboot中将自动生成的UUID保存到表中?

2guxujil  于 2023-04-20  发布在  Spring
关注(0)|答案(2)|浏览(281)

我是springboot的新手,非常感谢一些帮助。我的任务如下:
1.将JSON数据插入并存储到输入表中(使用eclipselink)此表中的一个数据是在服务实现中随机生成的UUID。
2.由ServiceImplementation.class生成的UUID随后存储在触发器表中。
我需要帮助存储UUID到触发器表,因为我不能找到一个合适的方法在线。
注意:我有一个存储库类用于这两个实体。
如果您需要我添加任何其他额外的代码片段,请让我知道。提前感谢!
Controller.java

package de.cibplus.cibplusngvdpGKZ.Controller;

import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import de.cibplus.cibplusngvdpGKZ.Model.GKZ;
import de.cibplus.cibplusngvdpGKZ.Model.GKZtrigger;
import de.cibplus.cibplusngvdpGKZ.Service.GKZService;


@RestController //@Controller + @ResponseBody
public class GKZController {
    
    @Autowired
    private GKZService gService;
    
    
    
    //Save Input data
        @PostMapping("/gkz")
        public  ResponseEntity<GKZ> saveGKZ(@RequestBody GKZ GKZ) {
        GKZ gkz = gService.saveGKZ(GKZ);
        return ResponseEntity.status(HttpStatus.CREATED).body(gkz) ;
            
        }
    
    
    }
    

}

Input.class

package de.cibplus.cibplusngvdpGKZ.Model;

import java.math.BigInteger;
import java.time.LocalDate;
//import java.util.Date;
import java.util.UUID;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.eclipse.persistence.annotations.UuidGenerator;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Setter
@Getter
@ToString
@Entity

@Table(name= "T_CIB_CIBp_GKZ_I")
public class GKZ {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        
        @Column(name="ID")
        private Integer ID;
        
        @Column(name="stichtag")
        private LocalDate stichtag;
        
        @Column(name="refstreet")
        private String refstreet;
        
        @Column(name="hnr")
        private String hnr;
        
        @Column(name="street")
        private String street;
        
        @Column(name="city")
        private String city;
        
        @Column(name="zipcode")
        private String zipcode;
    
        @Column(name="objecttype_id")
        private Integer objecttypeId;
        
        @Column(name="client_id")
        private String client_id;
        
        @Column(name="valuation_id")
        private BigInteger valuation_id;
        

        
        
        @Column(name="uid")
        private UUID uid;
        
        public LocalDate getstichtag() {
             return stichtag;
         }
        

        public void setstichtag(LocalDate stichtag) {
              this.stichtag = stichtag;
           }

         
         public String getrefstreet() {
             return refstreet;
         }
         
         public void setrefstreet(String refstreet) {
              this.refstreet = refstreet;
           }
         
         public String gethnr() {
             return hnr;
         }
         
         public void sethnr(String hnr) {
              this.hnr = hnr;
           }
         
         public String getstreet() {
             return street;
         }
         
         public void setstreet(String street) {
              this.street = street;
           }
         
         public String getcity() {
             return city;
         }
         
         public void setcity(String city) {
              this.city = city;
           }
         
         public String getzipcode() {
             return zipcode;
         }
         
         public void setzipcode(String zipcode) {
              this.zipcode = zipcode;
           }
         
         public Integer getobjecttypeId() {
             return objecttypeId;
         }
         
         public void setobjecttype_id(Integer objecttypeId) {
              this.objecttypeId = objecttypeId;
           }
         
         public String getclient_id() {
             return client_id;
         }
         
         public void setclient_id(String client_id) {
              this.client_id = client_id;
           }
         
         public BigInteger getvaluation_id() {
             return valuation_id;
         }
         
         public void setvaluation_id(BigInteger valuation_id) {
              this.valuation_id = valuation_id;
           }
         
         public UUID getuid() {
             return uid;
         }
         
         public void setuid(UUID uid) {
              this.uid = uid;
           }
         
         public Integer getID() {
             return ID;
         }
         
         public void setID(Integer ID) {
              this.ID = ID;
           }
        
        
            
            
        }

Trigger.class

package de.cibplus.cibplusngvdpGKZ.Model;

import java.util.UUID;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Setter
@Getter
@ToString
@Entity
@Table(name= "T_CIB_CIBp_uid")
public class GKZtrigger {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="ID")
    private Integer ID;
 
    
    @Column(name="uid")
    private UUID uid;
    
    public UUID getuid() {
         return uid;
     }
     
     public void setuid(UUID uid) {
          this.uid = uid;
       }

    public Integer getID() {
        return ID;
    }

    public void setID(Integer iD) {
        ID = iD;
    }

}

Service.class

package de.cibplus.cibplusngvdpGKZ.Service;

import java.util.List;
import java.util.UUID;

import org.springframework.stereotype.Service;

import de.cibplus.cibplusngvdpGKZ.Model.GKZ;
import de.cibplus.cibplusngvdpGKZ.Model.GKZtrigger;


public interface GKZService {
    
    

    GKZ saveGKZ(GKZ GKZ);
    
    
}

ServiceImplementation.class

package de.cibplus.cibplusngvdpGKZ.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import de.cibplus.cibplusngvdpGKZ.Model.GKZ;
import de.cibplus.cibplusngvdpGKZ.Model.GKZtrigger;

import de.cibplus.cibplusngvdpGKZ.Repository.GKZInputRepository;
import de.cibplus.cibplusngvdpGKZ.Repository.GKZTriggerRepository;

import de.cibplus.cibplusngvdpGKZ.Service.*;

@Service
public class GKZServiceImpl implements GKZService {
    
    
    @Autowired
    private GKZInputRepository gRepository;
    
    
    
    @Override
    public GKZ saveGKZ(GKZ GKZ) {

        //Generate random UUID
        UUID uuid=UUID.randomUUID();  
        GKZ.setuid(uuid);
        
        gRepository.save(GKZ);
        
        return GKZ;
        
    }
    
    
    }
lymnna71

lymnna711#

我更新了我的ServiceImplementation类。

@Override
    public GKZ saveGKZ(GKZ GKZ) {

        //Generate random UUID
        UUID uuid=UUID.randomUUID();  
        GKZ.setuid(uuid);
        
        GKZtrigger gkZtrigger = new GKZtrigger();
        gkZtrigger.setuid(uuid);
        
        gRepository.save(GKZ);
        tRepository.save(gkZtrigger);
        return GKZ;
        
    }

事实证明,只需创建一个示例,然后调用Repository就可以了!

ssm49v7z

ssm49v7z2#

在我的头上,你必须保存它到GKZTriggerRepository类似于你保存GKZ实体。

@Service
public class GKZServiceImpl implements GKZService {
 
    @Autowired
    private GKZInputRepository gRepository;

    @Autowired
    private GKZTriggerRepository gkzTriggerRepository;

    @Override
    @Transactional // either everything stored to DB or nothing
    public GKZ saveGKZ(GKZ GKZ) {

        //Generate random UUID
        UUID uuid=UUID.randomUUID();  
        GKZ.setuid(uuid);
    
        gRepository.save(GKZ);

        GKZtrigger gkzTrigger = new GKZtrigger();
        gkzTrigger.setuid(uuid);

        gkzTriggerRepository.save(gkzTrigger);
    
        return GKZ;
    }
}

从GKZ实体引用GKZtrigger实体

...

@Table(name= "T_CIB_CIBp_GKZ_I")
public class GKZ {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    ...

    @OneToOne
    private GKZtrigger gkzTrigger;

    ...

    public GKZtrigger getGkzTrigger() {
        return this.gkzTrigger;
    }

    public void setGkzTrigger(GKZtrigger gkzTrigger) {
        this.gkzTrigger = gkzTrigger;
    }

    ...

}

然后将GKZtrigger设置为GKZ实体,JPA将为您保存两者

...

@Override
public GKZ saveGKZ(GKZ GKZ) {

    //Generate random UUID
    UUID uuid=UUID.randomUUID();  
    GKZ.setuid(uuid);

    GKZtrigger gkzTrigger = new GKZtrigger();
    gkzTrigger.setuid(uuid);

    GKZ.setGkzTrigger(gkzTrigger);

    gRepository.save(GKZ); // JPA will save both entities
    
    return GKZ;
}

...

你还得加上

@OneToOne(mappedBy = "gkzTrigger")
private GKZ gkz

字段添加到GKZtrigger类中,这样JPA就可以确定关系的双方。
如果你沿着这条路走下去,我建议你谷歌一下“JPA one to one”,然后在Baeldung上读一篇文章(应该是第一个结果)。当你把它写下来的时候,还有@OneToMany @ManyToOne和@ManyToMany注解。当你的JPA代码工作的时候,浏览一下数据库,看看创建了什么表,它们是如何关联的。

相关问题