โปํด๊ฒฐ ๋ฐฉ๋ฒ๋ถํฐ ๋ณด๊ณ ์ถ์ ์ฌ๋๋ค์ ๋ฐ๋ก ๋ง์ง๋ง์ผ๋ก ๋ด๋ ค๊ฐ์ธ์!!โป
ํ๊ต ์์ ์์ ์งํํ๋ Spring boot ๊ณผ์ ์ํ ์,
์ด์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค.
2021-11-08 16:02:17.715 ERROR 9912 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field cart in com.example.PetAppMidterm.Application required a bean of type 'com.example.PetAppMidterm.PetRepository' that could not be found.
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.example.PetAppMidterm.PetRepository' in your configuration.
@Autowried๋ฅผ ์์ฑํ method๋ฅผ ์ ์ธํ๊ณ ์ํ์ ํด๋ณด๋, ๋ฌธ์ ๊ฐ ์๋ ๊ฑธ ๋ด์ ์ด๋ถ๋ถ์ด ์๋ชป ๋์๋ค๋ ๊ฒ์ ์๊ฒ๋์๋ค.
๋ํ, Error ๋ถ๋ถ์ ํ์ธํด๋ณด๋ฉด, bean์ ํ์ธํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๊ต์๋์ด ์๋ ค์ฃผ์๋ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ผํ๊ณ , ๊ฐ๋ ์ ์์ง ๋ชปํ๋, Error๊ฐ ๋๋ ์ค๋ซ๋์ ํด๊ฒฐํ๊ณ ์๋ค.
Spring boot์ ์ด์ง์ธ ๋๋ก์๋ ์๋ฌด๊ฒ๋ ๋ชจ๋ฅด๋ ๋ฌด์ง์ ์ํ์ธ ์ง์์ผ๋ก ๊ตฌ๊ธ ์์น๋ฅผ ํตํด ํด๊ฒฐํ๋ ค๊ณ ํ์๋ค.
๋ง์ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฐพ์๋ด์,
@repository๋ฅผ CrudRepository ์์ฑํ class์ ๋ฃ๊ธฐ,
CrudRepository ์์ฑํ class์ @Component ๋ฃ๊ธฐ,
@EnableJpaRepositories, @ComponentScan, @EntityScan
๋ฑ์ ํด๋ณด์์ง๋ง, ๋ชจ๋ ๋ค ์คํจ!!
์ด ํ ํ๋์ site๋ฅผ ํ์ธํด์ ํด๊ฒฐ์ ํ๊ฒ ๋์๋ค.
์ผ๋จ, ๋์ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
//์ด ์ฝ๋๋ ํ์ํ ์ค๋ช
์ ์ ์ธํ๊ณ ์ง์๋์ ์ฝ๋์ด๋ค.
package com.example.PetAppMidterm;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@DiscriminatorColumn(
discriminatorType = DiscriminatorType.STRING,
name = "pet_type",
columnDefinition = "CHAR(5)"
)
public abstract class Pet {
@Id @GeneratedValue
Long id;
String name;
// ๋๋จธ์ง ์ฝ๋ ์๋ต
}
package com.example.PetAppMidterm;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("cat")
public class Cat extends Pet implements Groomable, Runnable{
//์ฝ๋ ์๋ต
}
----------------------------------------
package com.example.PetAppMidterm;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("dog")
public class Dog extends Pet implements Runnable{
//์ฝ๋ ์๋ต
}
package com.example.PetAppMidterm;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PetRepository extends CrudRepository<Pet, Long>{//Repository Pattern Interface
}
<ํด๊ฒฐ ๋ฐฉ๋ฒ>
๊ฐ์ฅ ์ค์ํ ๊ฒ์, Table์ ๋ง๋๋ ๊ฒ์ด์๋ค.
ํ ๋ฒ๋ run์ ํ ์ ์ด ์๊ธฐ ๋๋ฌธ์ table์ด ์์ฑ์ด ๋์ง ์์๋ ๊ฒ์ด๋ค.
์ด์, table์ ์์ฑํ๋ @Table์ Pet Class์ ๋ฃ์ด์ผ ํ๋ค.
package com.example.PetAppMidterm;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Table
@Entity
@DiscriminatorColumn(
discriminatorType = DiscriminatorType.STRING,
name = "pet_type",
columnDefinition = "CHAR(5)"
)
public abstract class Pet {
@Id @GeneratedValue
Long id;
String name;
//๋๋จธ์ง ์ฝ๋ ์๋ต
}
@Entity ์์ ์๋ @Table ์ถ๊ฐ
+++ ์ถ๊ฐ๋ก ๊ต์๋์ CrudRepository๋ฅผ extends ํ ๋, @Repository๋ฅผ ์ ์ง ์์์ง๋ง
๋๋ @Repository์ @Table์ ์ถ๊ฐํ์ฌ
์ค๋ฅ ํด๊ฒฐ
โป ํ๋ฒ๋ง ์ค์ ํด์ฃผ๊ณ ๋ค์๋ถํฐ๋ @Table coding X -> ํ๋์ project์์
-์ค๋ฅ ํด๊ฒฐ ์ถ์ฒ
https://vladmihalcea.com/the-best-way-to-map-the-discriminatorcolumn-with-jpa-and-hibernate/