자바 jpa (1) 실체 관계 깊이 학습
6005 단어 자바
그 중 실체 관 계 는
@OneToOne, @OneToMany, @ManyToOne, @ManyToMany
아래 의 user 실 체 는 상기 각 주 해 를 사용 하여 각종 관 계 를 유지 하고 실체 대상 을 구축 한 후에 enity manager 를 사용 하여 각종 조작 을 하면 됩 니 다.
@Entity
@Table(name = "user")
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Integer age;
// user document , user , document
@OneToOne(cascade = CascadeType.ALL) // , user document
@JoinColumn(name = "user_document_id") // user
private UserDocument userDocument;
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(
name = "r_user_cource",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List cource;
@ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.DETACH})
@JoinColumn(name = "school_id")
private School school;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private List phone;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", userDocument=" + userDocument +
// ", cource=" + cource +
", school=" + school +
", phone=" + phone +
'}';
}
}
여기 서 many tomany 의 테스트 예 를 중점적으로 소개 합 니 다.
user 와 다 중 관 계 를 가 진 것 은 Course 실체 입 니 다.
@Data
@Entity
@Table(name = "course")
public class Cource {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//
private String name;
//
private Integer num;
//
@ManyToMany(cascade = CascadeType.PERSIST)//
@JoinTable(
name = "r_user_cource", //
joinColumns = @JoinColumn(name = "course_id"), //
inverseJoinColumns = @JoinColumn(name = "user_id") //
)
private List users;
@Override
public String toString() {
return "Cource{" +
"id=" + id +
", name='" + name + '\'' +
", num=" + num +
// ", users=" + users +
'}';
}
}
쌍방 이 @ Many ToMany 참조 제약 을 유지 한 것 을 볼 수 있 습 니 다. 이때 양쪽 의 실 체 를 통 해 등급 연결 작업 을 할 수 있 습 니 다.
테스트 클래스
이 테스트 방법 들 은 이 검사 의 인 스 턴 스 작업 을 추가 삭제 하 는 것 을 보 여 주 었 다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class ManyToManyTest {
@Autowired
private EntityManager entityManager;
@Test
@Transactional
@Rollback(false)
public void contextLoads() {
User user = new User();
user.setName(" ");
user.setAge(11);
User user2 = new User();
user2.setName(" ");
user2.setAge(14);
Cource course = new Cource();
course.setName(" ");
course.setNum(64);
Cource course2 = new Cource();
course2.setName(" ");
course2.setNum(64);
Cource course3 = new Cource();
course3.setName(" ");
course3.setNum(64);
List list1 = new ArrayList<>();
list1.add(course);
list1.add(course2);
list1.add(course3);
List list2 = new ArrayList<>();
list2.add(course);
list2.add(course2);
user.setCource(list1);
user2.setCource(list2);
entityManager.persist(user);
entityManager.persist(user2);
}
@Test
@Transactional
@Rollback(false)
public void save() {
User user = new User();
user.setName(" ");
user.setAge(11);
User user2 = new User();
user2.setName(" ");
user2.setAge(14);
Cource course = new Cource();
course.setName(" ");
course.setNum(64);
Cource course2 = new Cource();
course2.setName(" ");
course2.setNum(64);
Cource course3 = new Cource();
course3.setName(" ");
course3.setNum(64);
List list1 = new ArrayList<>();
list1.add(user);
list1.add(user2);
List list2 = new ArrayList<>();
list2.add(user);
course.setUsers(list1);
course2.setUsers(list2);
course3.setUsers(list1);
entityManager.persist(course);
entityManager.persist(course2);
entityManager.persist(course3);
}
@Test
@Transactional
@Rollback(false)
public void update(){
User user = entityManager.find(User.class,9L);
user.getSchool().setName("haha");
entityManager.merge(user);
}
@Test
@Transactional
@Rollback(false)
public void findcource(){
Cource cource = entityManager.find(Cource.class, 25L);
System.out.println(cource);
}
@Test
@Transactional
@Rollback(false)
public void delete(){
User user = entityManager.find(User.class,15L);
entityManager.remove(user);
}
}
주의해 야 할 것 은 다 중 관계 에서 캐 스 케 이 드 = 캐 스 케 이 드 타 입. ALL 을 설정 하거나 캐 스 케 이 드 타 입. REMOVE 를 포함 할 경우 등급 연결 삭제 시 중간 표를 삭제 하 는 것 외 에 다 중 관계 에 대응 하 는 다른 측의 실체 표 데 이 터 를 삭제 하 는데 일반적인 상황 에서 이것 은 업무 논리 에 부합 되 지 않 는 다.사실 다 중 관계 에 서 는 직렬 연결 을 설정 하지 않 고 삭제 하면 됩 니 다. 이 는 enity manger 를 통 해 대상 을 삭제 하면 중간 표를 삭제 합 니 다.
항목 주소 [email protected]:Christain1993/jpatest.git
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.