FINAL PROJECT
[게시판] 게시판 관련 ENTITY, 기본 프로젝트 구조
SummerON
2021. 7. 16. 17:02
1. ERD
2. 프로젝트 구조
3. ENTITY 클래스
User.java
package com.finalproject.ildoduk.entity.user;
import lombok.*;
import org.hibernate.annotations.*;
import javax.persistence.*;
import javax.persistence.Entity;
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class User {
@Id
private String id;
private char isHelper;
}
AuctionList.java
package com.finalproject.ildoduk.entity.action;
import com.finalproject.ildoduk.entity.user.*;
import lombok.*;
import org.hibernate.annotations.*;
import org.springframework.data.annotation.*;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.sql.*;
import java.time.*;
@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString(exclude = "address") //스택 오버플로 방지
@DynamicInsert
public class AuctionList {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long aucSeq;
@OneToOne(mappedBy = "aucSeq") //Address 테이블과 1:1 관계
private Address address;
@ManyToOne(fetch = FetchType.LAZY) //성능향상을 위해 지연로딩, 필요할 때만 아우터조인 사용
private User id;
@Column(nullable = false)
private int category;
private LocalDateTime doDateTime;
@Column(length = 30,nullable = false)
private String predictHour;
@Column(nullable = false)
private int level;
@Column(nullable = false)
private int startPrice;
@Column(nullable = false)
private int auctionGap;
@Column(length = 1000,nullable = false)
private String title;
@Column(length = 3000,nullable = false)
private String content;
@CreatedDate
private LocalDateTime regDate;
@ColumnDefault(value = "0")
private int driverLicense;
@ColumnDefault(value = "0")
private int gender;
@ColumnDefault(value = "0")
private int age;
@ColumnDefault(value = "0")
private int state;
}
Address.java
package com.finalproject.ildoduk.entity.action;
import lombok.*;
import org.hibernate.annotations.*;
import javax.persistence.*;
import javax.persistence.Entity;
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString(exclude = "aucSeq")
@DynamicInsert
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long addSeq;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn
private AuctionList aucSeq;
@Column(length = 300,nullable = false)
private String address;
@Column(length = 30,nullable = false)
private String sido;
@Column(length = 30,nullable = false)
private String sigungu;
}
BiddingList.java
package com.finalproject.ildoduk.entity.action;
import com.finalproject.ildoduk.entity.user.*;
import lombok.*;
import org.hibernate.annotations.*;
import javax.persistence.*;
import javax.persistence.Entity;
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString(exclude = {"aucSeq","id"})
@DynamicInsert
public class BiddingList {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long bidSeq;
@ManyToOne(fetch = FetchType.LAZY)
private AuctionList aucSeq;
@ManyToOne(fetch = FetchType.LAZY)
private User id;
@Column(nullable = false)
private int offerPrice;
@ColumnDefault(value="0")
private int chosen;
}
FK 처리 힘들었다..
우선 다 LAZY LOADING처리 해놓고 나중에 필요에 따라 EAGAR로 바꿀 예정
Lazy Loading 단점 : 필요한 순간에 쿼리를 실행하기 때문에 연관관계가 복잡할 경우 여러번의 쿼리가 실행 됨
작성 시 주의점
@ToString 어노테이션의 경우, 모든 항목을 다 출력하기 때문에 관계가 있는 테이블의 경우 ToString 때문에 스택오버플로가 발생할 수 있다 (특히 1:1 대응에서 서로 호출할 경우...!)
=> @ToString(exclude="") 하기! 보통 설정함