JPA関連
43888 ワード
対日関係を知る
プレートシンボル
package com.example.study.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.Date;
@Getter
@Setter
@Entity
@Table(name = "study_board")
public class Board {
@Id
@GeneratedValue
private Long seq;
private String title;
// private String writer;
private String content;
@Temporal(value = TemporalType.TIMESTAMP)
private Date createDate;
private Long cnt;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
}
Memeberエンティティ
package com.example.study.domain;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Getter
@Setter
@Entity
@ToString
public class Member {
@Id
@Column(name="MEMBER_ID")
private String id;
private String password;
private String name;
private String role;
}
BoardRepository
package com.example.study.persistence;
import com.example.study.domain.Board;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface BoardRepository extends CrudRepository<Board, Long> {
List<Board> findByTitle(String keyword);
// like
List<Board> findByContentContaining(String keyword);
// 여러 조건
List<Board> findByTitleContainingOrContentContaining(String title, String content);
// 데이터 정렬
List<Board> findByTitleContainingOrderBySeqDesc(String keyword);
// 페이징 처리
// List<Board> findByTitleContaining(String searchkeyword, Pageable paing);
// 페이지 타입 사용하기
Page<Board> findByTitleContaining(String searchkeyword, Pageable paing);
}
MemberRepository
package com.example.study.persistence;
import org.springframework.data.repository.CrudRepository;
public interface MemberRepository extends CrudRepository {
}
マルチペアテストコード
package com.example.study;
import com.example.study.domain.Board;
import com.example.study.domain.Member;
import com.example.study.persistence.BoardRepository;
import com.example.study.persistence.MemberRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
@SpringBootTest
public class RelationMappingTest {
@Autowired
private BoardRepository boardRepo;
@Autowired
private MemberRepository memberRepo;
@Test
public void testManyToOneInsert() {
Member member1 = new Member();
member1.setId("member1");
member1.setPassword("aaaa");
member1.setName("둘리");
member1.setRole("User");
memberRepo.save(member1);
for (int i = 0; i <= 3; i++) {
Board board = new Board();
board.setTitle("title" + i);
board.setContent("둘리가 작성한 내용 + " + i);
board.setCreateDate(new Date());
board.setMember(member1);
boardRepo.save(board);
}
}
}
一対一の関係を知る
住所と会員があります.
会員には住所があります.
住所は会員と一対一の関係です.
会員を通じて住所情報を取得することができます.
Addressエンティティ
package com.example.study.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
@Getter
@Setter
@Entity
@Table(name = "address")
public class Address {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@OneToOne(mappedBy = "address")
private Member member;
}
メンバーエンティティ
package com.example.study.domain;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
@Getter
@Setter
@Entity
@ToString
public class Member {
@Id
@Column(name="MEMBER_ID")
private String id;
private String password;
private String name;
private String role;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id", referencedColumnName = "id")
private Address address;
}
アドレス帳
package com.example.study.persistence;
import com.example.study.domain.Address;
import org.springframework.data.repository.CrudRepository;
public interface AddressRepository extends CrudRepository<Address, Long> {
}
一対一テストコード
@Test
public void testOneToOneFind() {
Address ad = new Address();
System.out.println("address id : "+ ad.getId());
Member member1 = new Member();
member1.setId("member2");
member1.setPassword("aaaa");
member1.setName("둘리22");
member1.setRole("User");
member1.setAddress(ad);
memberRepo.save(member1);
System.out.println(addressRepo.findById(ad.getId()).get().getMember().getName());
}
多対多の関係を理解する
Studioエンティティ
package com.example.study.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Entity
@Setter
@Getter
public class Student {
@Id
@GeneratedValue
Long id;
@ManyToMany
@JoinTable(
name = "course_like",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id"))
List<Course> likedCourses;
public boolean addCourse(Course cs) {
if (likedCourses == null) {
likedCourses = new ArrayList<Course>();
}
return likedCourses.add(cs);
}
}
Courseエンティティ
package com.example.study.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.List;
import java.util.Set;
@Entity
public class Course {
@Id
@GeneratedValue
Long id;
@ManyToMany(mappedBy = "likedCourses")
List<Student> likes;
}
マルチペアマルチテストコード
@Test
public void testManyToMany() {
Student st = new Student();
Course cs1 = new Course();
Course cs2 = new Course();
st.addCourse(cs1);
st.addCourse(cs2);
for (Course cs : st.getLikedCourses()) {
System.out.println(cs.toString());
}
}
Reference
この問題について(JPA関連), 我々は、より多くの情報をここで見つけました https://velog.io/@kim6515516/JPA-일대다-관계テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol