Spring MVC:处理一对多关系中的数据?

时间:2017-09-19 06:30:58

标签: java mysql spring spring-mvc

我正在使用Spring MVC实现一个Web应用程序。在我的应用程序中,我需要实现一个通知服务。这是通知的数据库表。

    CREATE TABLE `notification` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`),
  `message` varchar(100),
  `dateAndTime` time DEFAULT NULL,
  `read` tinyint(1) NOT NULL DEFAULT '0',
  `notificationType` int(11) DEFAULT NULL,
  `userId` bigint(20),
  FOREIGN KEY (`userId`) REFERENCES `application_user` (`id`)
);

此处userId是发送通知的用户的ID。这可以是单个用户,也可以是多个用户。这取决于notificationType的值。这是我为此编写的域模式。

@Entity
@Table(name = "notification")
public class Notification {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;

private String message;

@DateTimeFormat(pattern = "yy-MM-dd-hh-mm")
private Date dateAndTime;

private boolean read;

public static enum NotificationType{
    SINGLE_USER, MULTIPLE_USER
}

//@OneToMany
//@JoinColumn(name="type")
//private User user;

ApplicationUser applicationUser;

private NotificationType notificationType = NotificationType.SINGLE_USER;
......

我不清楚如何在这里实现一对多关系。我希望mysql查询在上述条件下是准确的。请帮帮我。

编辑:

如果NotificationType = SINGLE_USER,我需要只向一个用户发送通知。如果NotificationType = MULTIPLE_USER我需要向多个用户发送通知。

1 个答案:

答案 0 :(得分:1)

在表架构中,您可以定义多对一关系。

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

如果NotificationType = SINGLE_USER,我需要只向一个用户发送通知。如果NotificationType = MULTIPLE_USER我需要向多个用户发送通知。

在这种情况下,您应该创建另一个结构。

例如

CREATE USER (
    ...,
    notification_id,
    ...
)

class Notification {
    @OneToMany
    @JoinColumn(name="notification_id")
    private User user;
}

或者你可以创建新表,它只保存notification_id和user_id:

CREATE USER_NOTIFICATION (
    user_id,
    notification_id
)

然后

class Notification {
     @ManyToMany
     @JoinTable(
         name="USER_NOTIFICATION",
         joinColumns=@JoinColumn(name="USER_ID", referencedColumnName="ID"),
         inverseJoinColumns=@JoinColumn(name="NOTIFICATION_ID", 
         referencedColumnName="ID"))
  private List<User> users;
}
  

如何使用NotificationType连接此数据?

通知表中有列类型。如何发送通知 - 这是您的业务逻辑。为此,您不需要使用表结构。如果您愿意,可以创建触发器,这将检查您在USER_NOTIFICATION中插入新(notification_id,user_id)时的逻辑。