স্প্রিং বুট - কোনও পরিচালিত ধরণের নয়


137

আমি স্প্রিং বুট + জেপিএ এবং পরিষেবা শুরু করার সময় একটি সমস্যা ব্যবহার করি।

Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.nervytech.dialer.domain.PhoneSettings
    at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:219)
    at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68)
    at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:89)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:69)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:177)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)

এখানে অ্যাপ্লিকেশন.জভা ফাইল রয়েছে,

@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@SpringBootApplication
public class DialerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DialerApplication.class, args);
    }
}

আমি সংযোগ পুলিংয়ের জন্য ইউসিপি ব্যবহার করি এবং ডেটা উত্স কনফিগারেশন নীচে রয়েছে,

@Configuration
@ComponentScan
@EnableTransactionManagement
@EnableAutoConfiguration
@EnableJpaRepositories(entityManagerFactoryRef = "dialerEntityManagerFactory", transactionManagerRef = "dialerTransactionManager", basePackages = { "com.nervy.dialer.spring.jpa.repository" })
public class ApplicationDataSource {

    /** The Constant LOGGER. */
    private static final Logger LOGGER = LoggerFactory
            .getLogger(ApplicationDataSource.class);

    /** The Constant TEST_SQL. */
    private static final String TEST_SQL = "select 1 from dual";

    /** The pooled data source. */
    private PoolDataSource pooledDataSource;

ব্যবহারকারীর বিবরণ পরিষেবা বাস্তবায়ন,

@Service("userDetailsService")
@SessionAttributes("user")
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserService userService;

পরিষেবা স্তর বাস্তবায়ন,

@Service
public class PhoneSettingsServiceImpl implements PhoneSettingsService {

}

ভান্ডার শ্রেণি,

@Repository
public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> {

}

সত্তা শ্রেণি,

@Entity
@Table(name = "phone_settings", catalog = "dialer")
public class PhoneSettings implements java.io.Serializable {

ওয়েবসিকিউরিটি কনফিগ ক্লাস,

@Configuration
@EnableWebMvcSecurity
@ComponentScan
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsServiceImpl userDetailsService;

    /**
     * Instantiates a new web security config.
     */
    public WebSecurityConfig() {

        super();
    }

    /**
     * {@inheritDoc}
     * @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(org.springframework.security.config.annotation.web.builders.HttpSecurity)
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
            .antMatchers("/login", "/logoffUser", "/sessionExpired", "/error", "/unauth", "/redirect", "*support*").permitAll()
            .anyRequest().authenticated().and().rememberMe().and().httpBasic()
            .and()
            .csrf()
            .disable().logout().deleteCookies("JSESSIONID").logoutSuccessUrl("/logoff").invalidateHttpSession(true);
    }


    @Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {

      auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
    }

}

প্যাকেজগুলি নিম্নরূপ:

  1. Application ক্লাস হয় - com.nervy.dialer
  2. Datasource ক্লাস হয় - com.nervy.dialer.common
  3. সত্তা ক্লাস হয় - com.nervy.dialer.domain
  4. পরিষেবা ক্লাস রয়েছে - com.nervy.dialer.domain.service.impl
  5. কন্ট্রোলাররা এতে আছেন - com.nervy.dialer.spring.controller
  6. সংগ্রহশালা ক্লাস হয় - com.nervy.dialer.spring.jpa.repository
  7. WebSecurityConfig মধ্যে - com.nervy.dialer.spring.security

ধন্যবাদ


1
আমি বিশ্বাস করি আপনাকে এখনও আপনার সত্তা অবজেক্টের জন্য প্যাকেজটি স্ক্যান করতে হাইবারনেটকে বলতে হবে।
ক্রাইলিস -কোটিরিওসোটিস্টিক-

উত্তর:


51

আমি প্রতিস্থাপন মনে @ComponentScanসঙ্গে @ComponentScan("com.nervy.dialer.domain")ইচ্ছার হবে।

সম্পাদনা করুন:

বোনসিপির সাথে কীভাবে পুলযুক্ত ডেটাসোর্স সংযোগ স্থাপন করতে হয় তা প্রদর্শনের জন্য আমি একটি নমুনা অ্যাপ্লিকেশন যুক্ত করেছি।

অ্যাপ্লিকেশনটির আপনার একই কাঠামো রয়েছে। আমি আশা করি এটি আপনাকে আপনার কনফিগারেশন সমস্যাগুলি সমাধান করতে সহায়তা করবে


যদি আমি @ কম্পোনেন্টসস্ক্যান ("com.nervy.dialer.domain") যোগ করি, তবে ডেটাসোর্সটি অন্য কোনও প্যাকেজের পরিবর্তে আমি পছন্দ করি না exception সেই প্যাকেজটি @ কম্পোনেন্টসস্ক্যান (com "com.nervy.dialer.domain", "com.nervy.dialer.common" like) এর মতোও যুক্ত হয়েছে। এখন একই পুরানো ত্রুটি পাওয়া।
ব্যবহারকারী 1578872

1
বোনসিপির সাথে কীভাবে পুলযুক্ত ডেটাসোর্স সংযোগ স্থাপন করতে হয় তা প্রদর্শনের জন্য আমি একটি নমুনা অ্যাপ্লিকেশন যুক্ত করেছি। github.com/azizunsal/SpringBootBoneBPooledDataSource অ্যাপ্লিকেশনটির আপনার একই কাঠামো রয়েছে। আমি আশা করি এটি আপনাকে আপনার কনফিগারেশন সমস্যাগুলি সমাধান করতে সহায়তা করবে।
আজিজুনসাল

আপনি যাদু করেছেন। এটা ঠিক কাজ করে। আপনার সাহায্যের জন্য ধন্যবাদ. ডেটাসোর্সে আমার নীচের টিকা আছে। @ এনজেবলজেপাআরপোসিটরিজ (অ্যান্টিমেঞ্জারফ্যাক্ট্রিআরফ = "ডায়ালারএন্টিটি ম্যানেজারফ্যাক্টরি", লেনদেনের ব্যবস্থাপনারফ = "ডায়ালার ট্রান্সক্রিপশন ম্যানেজার", বেসপ্যাকেজ = com "com.nervytech.dialer.repository"})। এটি সরানোর পরে এবং ডায়ালার অ্যাপ্লিকেশনটিতে কেবলমাত্র @Eableable JpsRespository যুক্ত করার পরে, এটি সূক্ষ্মভাবে কাজ শুরু করে।
ব্যবহারকারী 1578872

আমি একই সমস্যা আছে। স্প্রিং বুটটি আমার সত্তাকে স্বীকৃতি দেয় না (হাইবারনেট 4+ সংস্করণ থেকে ডায়নামিকআপডেট)। আমি কম্পোনেন্টস্ক্যান বা এন্টিস্ক্যানে আমার মডেল প্যাকেজ যুক্ত করার চেষ্টা করেছি এবং আমি একই ত্রুটি পেয়েছি। অ্যাপ্লিকেশন শ্রেণিতে আমার টীকাগুলি হ'ল: স্প্রিংবুট অ্যাপ্লিকেশন কম্পোনেন্টস্ক্যান (বেসপ্যাকেজ = {"com.example.ontrollers", "com.example.services", "com.example.models"}) সক্ষম করুনআউটকোফিগ্রেশন @ কনফিগারেশন @ সক্ষম জেপাআরেপোসিটিরিজ (বেসপ্যাকেজ = com ")।
উদাহরণ.ডাও

আমরা জেপিএ সরবরাহকারী হিসাবে হাইবারনেটেড একই দৃশ্য ব্যবহার করেছি। এই সমস্ত সমাধানের চেষ্টা করার পরেও সমস্যাটি বিদ্যমান। আমার অ্যাপ্লিকেশন কনফিগারেশন ফাইলে এই কনফিগারেশনটি আমার জন্য সমস্যাটি সমাধান করেছে। hibernate.annotation.packages.to.scan = $ {myEntityPackage}
রবিন

112

স্প্রিং বুট এন্ট্রি পয়েন্ট শ্রেণিতে @ এন্টিস্ক্যান ব্যবহার করে সত্তার অবস্থান কনফিগার করুন ।

সেপ্টেম্বর 2016 আপডেট 1.4+ স্প্রিং থেকে বুট করার জন্য:
ব্যবহার org.springframework.boot.autoconfigure.domain.EntityScan
পরিবর্তে org.springframework.boot.orm.jpa.EntityScan, যেমন ... boot.orm.jpa.EntityScan হয় অবচিত স্প্রিং বুট 1.4 হিসাবে


2
এই বিকল্পটিও সাহায্য করে না। আমার ধারণা, আমি আমার কনফিগারেশনে অন্য কিছু মিস করছি।
ব্যবহারকারী 1578872

3
আমার ক্ষেত্রেও সাহায্য করে না।
বালফ্লায়ার

1
এটি আমার পক্ষে কাজ করেছে তবে এটি একটি অবমূল্যায়িত টিকা।
হুয়ান কার্লোস পুয়ের্তো

ধন্যবাদ জুয়ান, আমি সত্তা স্ক্যানের বর্তমান সংস্করণ সহ উত্তরটি আপডেট করেছি।
মনীশ মহেশ্বরী

78

নিম্নলিখিত সমস্ত যোগ করার চেষ্টা করুন, আমার অ্যাপ্লিকেশনটিতে এটি টমক্যাট দিয়ে ভাল কাজ করছে

 @EnableJpaRepositories("my.package.base.*")
 @ComponentScan(basePackages = { "my.package.base.*" })
 @EntityScan("my.package.base.*")   

আমি স্প্রিং বুট ব্যবহার করছি, এবং যখন আমি এমবেডড টোমক্যাট ব্যবহার করছি তখন এটি ভাল কাজ করছিল @EntityScan("my.package.base.*")কিন্তু যখন আমি অ্যাপটিকে বহিরাগত টমক্যাটে স্থাপন করার চেষ্টা করেছি তখন আমি not a managed typeআমার সত্তার জন্য ত্রুটি পেয়েছি ।


আপনি আমার নায়ক.
আর্টুর এ্যাসিক

27

আমার ক্ষেত্রে সমস্যাটি এনটোটেশন সহ আমার সত্তা ক্লাসগুলি বর্জন করতে ভুলে যাওয়ার কারণে হয়েছিল @javax.persistence.Entity। ডোহ!

//The class reported as "not a amanaged type"
@javax.persistence.Entity
public class MyEntityClass extends my.base.EntityClass {
    ....
}

আমার ক্ষেত্রে @Entityটীকায়ও টেবিলের নাম প্রয়োজন । আমি এখানে একটি নমুনা প্রকল্প স্থাপন করেছি: github.com/mate0021/two_datasources.git
mate00

22

যদি আপনি অন্য প্রকল্প থেকে অধ্যবসায় কনফিগারেশনটি অনুলিপি করে থাকেন তবে আপনাকে অবশ্যই প্যাকেজটি অ্যান্টিটি ম্যানেজারফ্যাক্টরিতে ম্যানুয়ালি সেট করতে হবে :

@Bean
public EntityManagerFactory entityManagerFactory() throws PropertyVetoException {
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setGenerateDdl(true);
    LocalContainerEntityManagerFactoryBean factory;
    factory = new LocalContainerEntityManagerFactoryBean();
    factory.setPackagesToScan("!!!!!!misspelled.package.path.to.entities!!!!!");
    //...
}

18

আপনি @ এন্টিস্ক্যান ব্যবহার করতে পারেন টীকাটি এবং আপনার সমস্ত সত্তা স্ক্যান করার জন্য আপনার সত্তা প্যাকেজ সরবরাহ । আপনি এই বেসটি আপনার বেস অ্যাপ্লিকেশন শ্রেণিতে ব্যবহার করতে পারেন যেখানে আপনি @ স্প্রিংবুট অ্যাপ্লিকেশন টীকা ব্যবহার করেছেন।

যেমন @ এন্টিস্ক্যান ("com.test.springboot.demo.entity")



12

আমি এই ত্রুটিটি পেয়েছি কারণ আমি নির্বোধ লিখেছি

প্রকাশ্য ইন্টারফেস FooBarRepository CrudRepository <FOOBAR প্রসারিত সংগ্রহস্থলের প্রয়োগ , লং> {...

একটি সংক্ষিপ্ত বিবরণ: কেউ সাধারণত FooBar অবজেক্টগুলি পরিচালনা করার জন্য একটি FooBarRepository শ্রেণি তৈরি করে (প্রায়শই একটি টেবিলে ডেটা উপস্থাপন করে foo_bar এর মতো কিছু বলে) এই ক্ষেত্রে, FooBar। আমি যা ভুল করে টাইপ করেছি, তা ছিল ফুবারের পরিবর্তে ফুবারপোসিটোরি। FooBarRepository টাইপ নয় (শ্রেণি) আমি FooBarRepository দিয়ে পরিচালনা করার চেষ্টা করছি। সুতরাং, সংকলকটি এই ত্রুটিটি জারি করে।

টাইপিংয়ের ভুল বিটটি আমি সাহসের সাথে হাইলাইট করেছি । আমার উদাহরণে হাইলাইট শব্দের সংগ্রহস্থল এবং কোড সংকলন মুছুন।


6
আমার জীবনের 15 মিনিট যা আমি পুনরুদ্ধার করতে পারব না
অস্কার মনকায়ো

@ তায়েবহুসাইন, আমি কিছু ব্যাখ্যা দিয়ে পোস্টটি আপডেট করেছি। এটি আপনাকে সাহায্য করে আশা করি।
মারভো


6

আপনি হয় ক্লাস সংজ্ঞাতে @ এন্টিটি মিস করেছেন বা আপনার কাছে স্পষ্টত উপাদান স্ক্যানের পাথ রয়েছে এবং এই পথে আপনার ক্লাস নেই


3

আমি স্প্রিং বুট ২.০ ব্যবহার করছি এবং আমি @ কমপোজেন্টস্ক্যানকে প্রতিস্থাপন করে এটি ঠিক করেছি @EntityScan


1

আমার একই সমস্যা ছিল তবে কেবল যখন স্প্রিং বুট পরীক্ষার ক্ষেত্রে জেপিএ প্রয়োজন হয় running শেষ ফলাফলটি হল যে আমাদের নিজস্ব জেপিএ পরীক্ষার কনফিগারেশনটি কোনও এনটিটিম্যানেজারফ্যাক্টরির সূচনা এবং প্যাকেজগুলিকে স্ক্যান করতে সেট করেছিল। আপনি যদি ম্যানুয়ালি সেট করে থাকেন তবে স্পষ্টতই এটিটি স্ক্যান পরামিতিগুলিকে ওভাররাইড করবে।

    final LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setJpaVendorAdapter( vendorAdapter );
    factory.setPackagesToScan( Project.class.getPackage().getName());
    factory.setDataSource( dataSource );

নোটটিতে গুরুত্বপূর্ণ: আপনি যদি এখনও আটকে আছে আপনি একটি বিভাজক পয়েন্ট সেট করা উচিত org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManagerউপর setPackagesToScan()পদ্ধতি এবং কোথায় এই নামক করা হচ্ছে এবং কি প্যাকেজ এটি পাস হচ্ছে কটাক্ষপাত করা।


1

স্প্রিং বুট 1.3.x থেকে 1.5 এ স্থানান্তরিত করার সময় আমার কিছু সমস্যা হয়েছিল, আমি এটিটি ম্যানেজারফ্যাক্টরি বিনের সত্তায় প্যাকেজ আপডেট করার পরে কাজ করেছিলাম

  @Bean(name="entityManagerFactoryDef")
  @Primary
  public LocalContainerEntityManagerFactoryBean defaultEntityManager() {
      Map map = new HashMap();
      map.put("hibernate.default_schema", env.getProperty("spring.datasource.username"));
      map.put("hibernate.hbm2ddl.auto", env.getProperty("spring.jpa.hibernate.ddl-auto"));
      LocalContainerEntityManagerFactoryBean em = createEntityManagerFactoryBuilder(jpaVendorProperties())
              .dataSource(primaryDataSource()).persistenceUnit("default").properties(map).build();
      em.setPackagesToScan("com.simple.entity");
      em.afterPropertiesSet();
      return em;
  }

এই শিমটি নীচে হিসাবে প্রয়োগ শ্রেণিতে উল্লেখ করা হয়েছে

@SpringBootApplication
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryDef")
public class SimpleApp {

}

0

আমার একই সমস্যা রয়েছে, সংস্করণ বসন্ত বুট v1.3.x এ আমি যা করেছি তা হ'ল বসন্ত বুট সংস্করণ 1.5.7.RELEASE সংস্করণে আপগ্রেড করা। তারপরে সমস্যা চলে গেল।


আমি 1.3.x এ ছিলাম তখন আমি
1.5.5 এ চলেছি


0

নীচে আমার জন্য কাজ করেছে ..

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import org.apache.catalina.security.SecurityConfig;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import com.something.configuration.SomethingConfig;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { SomethingConfig.class, SecurityConfig.class }) //All your configuration classes
@EnableAutoConfiguration
@WebAppConfiguration // for MVC configuration
@EnableJpaRepositories("com.something.persistence.dataaccess")  //JPA repositories
@EntityScan("com.something.domain.entity.*")  //JPA entities
@ComponentScan("com.something.persistence.fixture") //any component classes you have
public class SomethingApplicationTest {

@Autowired
private WebApplicationContext ctx;
private MockMvc mockMvc;

@Before
public void setUp() {
    this.mockMvc = MockMvcBuilders.webAppContextSetup(ctx).build();
}

@Test
public void loginTest() throws Exception {
    this.mockMvc.perform(get("/something/login")).andDo(print()).andExpect(status().isOk());
}

}


0

আমি আমার অ্যাপ্লিকেশন ক্লাসটি প্যারেন্ট প্যাকেজে সরিয়েছি যেমন:

প্রধান শ্রেণি: com.job.application

সত্তা: com.job.application.entity

এইভাবে আপনাকে @ এন্টিস্ক্যান যোগ করতে হবে না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.