如何使用构造函数在选择子句中为多个表的选定列编写HQL JOIN查询
发布时间:2021-01-19 11:05:29 所属栏目:MsSql教程 来源:网络整理
导读:副标题#e# 我正在使用Constructor()在Select子句中为多个表的选定列编写HQL JOIN查询 我有以下实体: 实体1:NotificationObject.java @Entity@Table(name="notification_object")public class NotificationObject implements Serializable { private stati
副标题[/!--empirenews.page--]
我正在使用Constructor()在Select子句中为多个表的选定列编写HQL JOIN查询 我有以下实体: 实体1:NotificationObject.java @Entity @Table(name="notification_object") public class NotificationObject implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue( strategy=GenerationType.IDENTITY ) @Column( columnDefinition="INT(10) UNSIGNED" ) private Integer id; @Column( name="entity_type_id",columnDefinition="TINYINT UNSIGNED",nullable=false ) private Short entityTypeId; @Column( name="entity_id",columnDefinition="INT(10) UNSIGNED",nullable=false ) private Integer entityId; @DateTimeFormat( pattern="yyyy-MM-dd" ) @Temporal( TemporalType.TIMESTAMP ) @CreationTimestamp @Column( name="created_on"/*,nullable=false*/ ) private Date createdOn; @OneToMany( mappedBy = "notificationObject" ) private Set<Notification> notifications = new LinkedHashSet<>(); public NotificationObject() {} public NotificationObject(Short entityTypeId,Integer entityId) { this.entityTypeId = entityTypeId; this.entityId = entityId; } // Getters and Setters } 实体2:NotificationChange.java @Entity @Table(name="notification_change") public class NotificationChange implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(columnDefinition="INT(10) UNSIGNED") private Integer id; @ManyToOne( fetch=FetchType.LAZY ) @JoinColumn( name="notification_object_id",nullable=false,foreignKey=@ForeignKey(name="fk_notification_change_notification_object_noti_object_id") ) private NotificationObject notificationObject; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn( name="actor_id",foreignKey=@ForeignKey(name="fk_notification_change_user_user_id") ) private User actor; public NotificationChange() {} public NotificationChange( User actor ) { this.actor = actor; } // Getters and Setters } 实体3:Notification.java @Entity @Table(name="notification") public class Notification implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue( strategy=GenerationType.IDENTITY ) @Column( columnDefinition="INT(10) UNSIGNED" ) private Integer id; @ManyToOne( fetch=FetchType.LAZY ) @JoinColumn( name="notification_object_id",foreignKey=@ForeignKey(name="fk_notification_notification_object_notification_object_id") ) private NotificationObject notificationObject; @ManyToOne( fetch=FetchType.LAZY ) @JoinColumn( name="notifier_id",foreignKey=@ForeignKey(name="fk_notification_user_user_id") ) private User notifier; @Column( name="is_seen",nullable=false ) private boolean isSeen; @Column( name="is_viewed",nullable=false ) private boolean isViewed; public Notification() {} public Notification( User notifier,boolean isSeen,boolean isViewed ) { this.notifier = notifier; this.isSeen = isSeen; this.isViewed = isViewed; } // Getters and Setters } 实体4:User.java @Entity @Table(name="user") public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="user_id") private String user_id; // Extra fields @OneToOne(cascade=CascadeType.MERGE) @JoinColumn(name="emp_id",columnDefinition="INT(10) UNSIGNED") private Employee employee; @OneToMany( mappedBy="notifier" ) private Set<Notification> notifications = new LinkedHashSet<>(); public User() {} public User(String user_id) { this.user_id = user_id; } // Getters and Setters } 实体5:Employee.java @Entity @Table(name="employee") public class Employee implements Serializable { private static final long serialVersionUID = 1L; public Employee() { } public Employee( String emp_id ) { this.emp_id = emp_id; } @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="emp_id") private String emp_id; @Column(name="first_name") private String first_name; @Column(name="last_name") private String last_name; // Extra fields @OneToOne(mappedBy="employee") @JsonBackReference private User user; // Getters and Setters } DTO 1:Notify.java public class Notify { private Integer notificationObjectId,notificationId,notifierId,actorId,entityId; private Short entityTypeId; private String notifierName,actorName,message,notificationLink; private Date createdOn; private boolean isSeen,isViewed; public Notify() {} public Notify ( Integer notificationObjectId,Integer notificationId,Integer notifierId,Integer actorId,Integer entityId,Short entityTypeId,String notifierName,String actorName,String message,String notificationLink,Date createdOn,boolean isViewed ) { // Set Values Here } public Notify (Integer notificationObjectId,boolean isViewed ) { // Or Here } // Getters and Setters } 我在JOINs很弱. (编辑:南京站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |