2017-08-05 39 views
1

我有两个表这些是User和UserDetails。如何使用Spring引导保存多个表JpaRepository

@Entity 
public class User { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Integer id; 

private String userName; 

private String password; 

} 


@Entity 
public class UserDetails { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Integer id; 

private String firstName; 

private String lastName; 

private String address; 

private Date birthday; 

@ManyToOne 
private User user; 

} 

有没有显示getter和setter。

我使用弹簧引导来创建我的应用程序。当我去保存User时,我想同时保存这两个表。这意味着首先保存User表,然后我保存UserDetails表(保存UserDetails表,User表主键是必需的)。我如何使用spring启动JPA存储库来做这件事?另一件事,如果UserDetails表未保存,我们想要回滚我们的整个事务(这意味着我们必须回滚用户表)。

这是我的服务

@Service 
@Transactional 
public class UserDetailsService { 
    @Autowired 
    private UserDetailsRepository userDetailsRepository; 
    @Autowired 
    private UserRepository userRepository; 
    void saveUserDetails(String userName, String password, String firstName, String lastName, 
      String address, Date birthday) { 
     User n = new User(); 
     n.setUserName(userName); 
     n.setPassword(password); 
     UserDetails ud = new UserDetails(); 
     ud.setFirstName(firstName); 
     ud.setlastName(lastName); 
     ud.setAddress(address); 
     ud.setBirthDate(birthday); 
     userRepository.save(n); 
     userDetailsRepository.save(ud); 
    } 
} 

回答

1

你需要在你的实体类

  • User做一个愚蠢的变化,类添加相应的getter和setter场是由映射UserDetails

    @OneToMany(mappedBy="user") 
    private Collection<UserDetails> userDetails; 
    
  • UserDetails类中,为字段user添加一个额外的注释。像:

    @ManyToOne 
    @JoinColumn(name="id") 
    private User user; 
    

回滚而失败的交易,你可以在你的服务层添加@Transactional标注(如您已呼吁.save().persists()方法)。

+0

感谢您的回答。当我去保存'userDetails'表我想'用户'表ID。但我如何获得用户ID。有两个表要保存相同的事务。 –

+0

您是否尝试过我的方法? – sunkuet02

+0

是的,但它不工作。我想我在服务课内犯错。但我找不到它。我把我的服务班放在上面(以下问题) –