Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jpa challenge #3

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,41 @@
</div>
</details>

<details>
<summary>week2.JPA-standard</summary>
<div markdown="1">

![스크린샷 2024-09-15 162049](https://github.com/user-attachments/assets/5a4c23ba-2197-4bb6-8e34-25e169a7b152)


</div>
</details>

<details>
<summary>week2.JPA-challenge</summary>
<div markdown="1">

### Member Test

![스크린샷 2024-09-15 175143](https://github.com/user-attachments/assets/1e41e414-0290-46dd-8472-0e03f11fecb5)

<br>

### Song Test

![스크린샷 2024-09-15 234703](https://github.com/user-attachments/assets/43b5ad0c-9570-4345-91af-d601b4d87fe3)

<br>

### PlayList Test

![스크린샷 2024-09-15 230558](https://github.com/user-attachments/assets/a78a5978-84f3-446c-8c04-3bb14f13fd73)

<br>

### PlayListSong Test

![스크린샷 2024-09-15 230546](https://github.com/user-attachments/assets/470d4e9d-5b70-4f6f-9379-c5fffb8e3196)

</div>
</details>
3 changes: 3 additions & 0 deletions YoungJu-Lee-Spring/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ dependencies {

// h2 연결
runtimeOnly 'com.h2database:h2'

// 쿼리 파라미터 확인
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class YoungJuLeeSpringApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;
import java.util.List;
import java.util.ArrayList;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class Album {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "album_id")
private Long id;

private String title;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "artist_id")
private Artist artist;
public void setArtist(Artist artist) {
this.artist = artist;
}

@OneToMany(mappedBy = "album", cascade = CascadeType.ALL)
private List<Song> songs = new ArrayList<>();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;
import java.util.List;
import java.util.ArrayList;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class Artist {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "artist_id")
private Long id;
private String name;

@OneToMany(mappedBy = "artist", cascade = CascadeType.ALL)
private List<Song> songs = new ArrayList<>();

@OneToMany(mappedBy = "artist", cascade = CascadeType.ALL)
private List<Album> albums = new ArrayList<>();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdAt;

@LastModifiedDate
private LocalDateTime updatedAt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class Genre {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "genre_id")
private Long id;
private String name;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
@Table(name = "genre_song")
public class GenreSong {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "genre_id")
private Genre genre;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "song_id")
private Song song;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
@Table(name = "likes")
public class Like extends BaseTimeEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "like_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "song_id")
private Song song;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;
import java.util.List;
import java.util.ArrayList;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class Member extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id")
private Long id;

private String name;

@Column(nullable = false, unique = true)
private String email;

@OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
private List<PlayList> playlists = new ArrayList<>();

@OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
private List<Like> likes = new ArrayList<>();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class PlayList {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "playlist_id")
private Long id;

private String name;
private String description;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;

public void setMember(Member member) {
this.member = member;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class PlayListSong extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "playlist_song_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "playlist_id")
private PlayList playlist;

@JoinColumn(name = "song_id")
@ManyToOne(fetch = FetchType.LAZY)
private Song song;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.example.YoungJu_Lee_Spring.domain;

import jakarta.persistence.*;
import lombok.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class Song extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "song_id")
private Long id;

private String title;

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "artist_id")
private Artist artist;

public void setArtist(Artist artist) {
this.artist = artist;
}

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "album_id")
private Album album;

public void setAlbum(Album album) {
this.album = album;
}

@OneToMany(mappedBy = "song", cascade = CascadeType.ALL)
private List<Like> likes = new ArrayList<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.example.YoungJu_Lee_Spring.repository;

import com.example.YoungJu_Lee_Spring.domain.Album;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;

@Repository
public class AlbumRepository {

@PersistenceContext
EntityManager em;

public String save(Album album) {
em.persist(album);
return album.getTitle();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.example.YoungJu_Lee_Spring.repository;

import com.example.YoungJu_Lee_Spring.domain.Artist;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;

@Repository
public class ArtistRepository {

@PersistenceContext
EntityManager em;

public String save(Artist artist) {
em.persist(artist);
return artist.getName();
}
}
Loading