当表被映射多对多时,无法从数据库中获取数据

时间:2017-05-20 07:40:28

标签: spring-boot spring-data-jpa

我无法从数据库中获取用户数据,我也想知道如何在同一场景的许多情况下处理其余请求。

我正在使用Spring Boot和Spring Data JPA。我的数据库代码如下:

CREATE TABLE `m3_group` (
  `GROUP_ID` bigint(11) NOT NULL AUTO_INCREMENT,
  `GROUP_NAME` varchar(30) DEFAULT NULL,
  `GROUP_CREATED_DATE` datetime DEFAULT NULL,
  `GROUP_ADMIN` varchar(14) DEFAULT NULL,
  PRIMARY KEY (`GROUP_ID`)
)

 ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `m3_user` (
  `USER_ID` bigint(11) NOT NULL AUTO_INCREMENT,
  `USER_NAME` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=330 DEFAULT CHARSET=utf8;



CREATE TABLE `m3_user_group` (
  `GROUP_USER_ID` bigint(11) DEFAULT NULL,
  `GROUP_ID` bigint(11) DEFAULT NULL,
  KEY `FK1_GROUP_ID` (`GROUP_ID`),
  KEY `FK2_USER_ID` (`GROUP_USER_ID`),
  CONSTRAINT `FK1_GROUP_ID` FOREIGN KEY (`GROUP_ID`) REFERENCES `m3_group` (`GROUP_ID`),
  CONSTRAINT `FK2_USER_ID` FOREIGN KEY (`GROUP_USER_ID`) REFERENCES `m3_user` (`USER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  




@Entity
@Table(name = "M3_USER")
public class User implements Serializable 
{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "USER_ID")
    private long userId;

    @NotBlank
    @Column(name = "USER_NAME")
    private String userName;

    //many-to-many
    @ManyToMany(mappedBy="listOfUsers",fetch=FetchType.EAGER)
    private List<Group> listOfGroup=new ArrayList<Group>();

    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public List<Group> getListOfGroup() {
        return listOfGroup;
    }

    public void setListOfGroup(List<Group> listOfGroup) {
        this.listOfGroup = listOfGroup;
    }

}


@Entity
@Table(name="M3_GROUP")  
public class Group implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="GROUP_ID")
    private long groupId;

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

    @CreatedDate
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="GROUP_CREATED_DATE")
    @JsonFormat(locale = "en-IN", shape = JsonFormat.Shape.STRING, pattern = 
    "yyyy-MM-dd HH:mm", timezone = "GMT+5:30")
    private Date groupCreatedDate;

    @Column(name="GROUP_ADMIN") 
    private String groupAdminMobileNumber;


    //many-to-many
    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name = "M3_USER_GROUP", joinColumns = @JoinColumn(name = 
    "GROUP_USER_ID") , inverseJoinColumns = @JoinColumn(name = "GROUP_ID") )
    private List<User> listOfUsers=new ArrayList<User>();

    public long getGroupId() {
        return groupId;
    }

    public void setGroupId(long groupId) {
        this.groupId = groupId;
    }

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public Date getGroupCreatedDate() {
        return groupCreatedDate;
    }

    public void setGroupCreatedDate(Date groupCreatedDate) {
        this.groupCreatedDate = groupCreatedDate;
    }

    public String getGroupAdminMobileNumber() {
        return groupAdminMobileNumber;
    }

    public void setGroupAdminMobileNumber(String groupAdminMobileNumber) {
        this.groupAdminMobileNumber = groupAdminMobileNumber;
    }

    public List<User> getListOfUsers() {
        return listOfUsers;
    }

    public void setListOfUsers(List<User> listOfUsers) {
        this.listOfUsers = listOfUsers;
    }
}




@Repository
public interface GroupRepository extends JpaRepository<Group, Long> {
    List<Group> findByGroupId(long groupid);

}


@RestController
public class GroupController 
{
    @Autowired
    GroupRepository groupRepository;

    @RequestMapping(value="/find/{groupId}",method=RequestMethod.POST)
    public ResponseEntity<List<Group>> find(@PathVariable String groupId)
    {
        long id=Long.parseLong(groupId);
        List<Group> group = groupRepository.findByGroupId(id);
        System.out.println(group.toString());
        return new ResponseEntity<List<Group>>(group,HttpStatus.OK);

    }
}

I have mapped the user and group table with many to many bidirectional and i am trying to fetch the data i.e users associated with the groupId but listOfUsers is showing empty.

My rest request is:
Http ://localhost:5000/find/1

And the response is:
[
{
"groupId": 1,
"groupName": "Om namo raghavendra",
"groupCreatedDate": "2017-05-17 12:48",
"groupAdminMobileNumber": "917676060664",
"listOfUsers":[
]
}
]

listOfUsers为空,因此我希望用户使用groupId。

0 个答案:

没有答案