Monthly Archives: March 2018

Error: findOne 오류~ Optional Spring Data 1.x대비 2.x대에 크게 변한점

Message : Type mismatch Require Example<(???…)>

이상한 오류같은 메시지… kotlin 버전충돌 때문에 발생한 적이 있어서 그 부분을 찾았는데 이상해서 찾아보니 SpringData 문제였다.

분석

예전에는 이렇게 썼다.

@Repository
public interface SocialRepository extends JpaRepository<SocialEntity, Long> {
}
---
@Autowired
private SocialRepository socialRepository;

socialRepository.findOne(ID)

이렇게 하면 CRUDRepository 내부의 T findOne(ID)가 호출이 됐는데

@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
  T findOne(ID id);
}

이 부분이 변경됐다.

CRUDRepository에는 Optional(T) findByID(ID)가 들어가 있다.

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
  Optional<T> findById(ID id);
}

findOne을 호출하면

QueryByExampleExecutor{
  <S extends T> Optional<S> findOne(Example<S> example);
}

이녀석이 호출된다.

에러가 날 수 밖에..

처리

코드는 다 바꿔야 한다.

findById(ID).get()

이전코드를 그냥 써야하는 상황에서 쉽게 바꾸려면 이렇게만 해도 되고..

아니면 Optional을 활용하는 방안을 찾을 필요가 있다.

Null처리 문제 때문에 생긴 것 같다

Error: Vagrant box respository

Message

➜  testva vagrant init ubuntu/xenial64
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
➜  testva vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/xenial64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
The box 'ubuntu/xenial64' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Atlas, please verify you're logged in via
`vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://atlas.hashicorp.com/ubuntu/xenial64"]
Error: Could not resolve host: atlas.hashicorp.com

Ubuntu 17.10 기본 apt install vagrnat 설치할 때 리포지터리 URL문제

설정을 변경해주거나 vagrant 공식 사이트에서 deb를 다운받아 설치하면 해결

vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/xenial64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'ubuntu/xenial64'
    default: URL: https://vagrantcloud.com/ubuntu/xenial64
==> default: Adding box 'ubuntu/xenial64' (v20180302.0.0) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/20180302.0.0/providers/virtualbox.box
==> default: Successfully added box 'ubuntu/xenial64' (v20180302.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/xenial64'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: docker-ub

주소가 바뀌었다.

https://atlas.hashicorp.com/ubuntu/xenial64

https://vagrantcloud.com/ubuntu/xenial64

Vagrant global 설정 변경

??어뜨케 하나

/home/{USERNAME}/.vagrant.d/data/checkpoint_cache??

아닌것같고… 확인필요

Vagrantfile 변경

https://www.vagrantup.com/docs/vagrantfile/machine_settings.html

config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.box_url = "https://vagrantcloud.com/ubuntu/xenial64"

공식 사이트에서 deb설치

그냥 새로 깔았다.

찾으려면 설치경로 전체에서 문자열 검색해야할 것 같다.