
Igor
29.03.2016
19:38:04
так там круд с ними

Митко Соловец?
29.03.2016
19:38:10
но то круд
а ты говоришь сотни объектов

Igor
29.03.2016
19:38:16
логика вся в джаве

Google

Митко Соловец?
29.03.2016
19:38:20
это батч апдейт
это ты имеешь в виду?

Igor
29.03.2016
19:38:29
не совсем
объекты процессятся по очереди
ну смотри
http://www.nowystyl.ru/products/office-chairs-ru/PILOT

Митко Соловец?
29.03.2016
19:38:44
вот допустим хочу кресло добавить

Igor
29.03.2016
19:38:52
вот я из него выгребаю все
материал в отдельную таблицу

Митко Соловец?
29.03.2016
19:39:01
парсишь?

Igor
29.03.2016
19:39:04
тип материала
да

Митко Соловец?
29.03.2016
19:39:11
такой ты шалун???
а я думал сам все собираешь)

Google

Igor
29.03.2016
19:39:35
так кресла прямо эти и продаем, смысл руками их вбивать)
ну короче, сохраняется отсюда материал, тип материала, отдельно сет материалов
и сам продукт
таких кресел за 1 раз 50 апдейтится
конкретно в этом случае я обновляться вряд ли чаще чем раз в полгода буду
но просто юзкейс интересен, как лучше, если это часто

Митко Соловец?
29.03.2016
19:41:24
@Transactional
public void bulkUpdatePrice(String path, Integer sheetNumber) throws IOException {
int i=0;
for (T t : getAll()) {
ExcelDocument document = ExcelDocument.getInstance(path);
parser.readFromExcel(t, document, sheetNumber);
Session session = entityManager.unwrap(Session.class);
session.merge(t);
logger.info("Update price for " + t.getName() + ": " + t.getPrice());
i++;
if (i % 20 == 0) {
session.flush();
session.clear();
}
}
}
у меня вот так)
самый распространенный и рекомендуемый способ

Igor
29.03.2016
19:42:05
но у тебя док больше ни от чего не зависит
а у меня все между собой зависят

Митко Соловец?
29.03.2016
19:42:24
да я к тому, что просто каждые 20 айтемов делаю флуш в базу
ну и плюс там пропертя у хибера прописана

Igor
29.03.2016
19:43:04
а на выходе он сам флаш не сделает?

Митко Соловец?
29.03.2016
19:43:14
у него будет аут оф мемори
угадай почему)
кстати, вопрос уровня джуниора

Igor
29.03.2016
19:43:35
ну если дохерища объектов, то да

Митко Соловец?
29.03.2016
19:43:50
да, хибернетовская поделка просто все кэширует
поэтому жепа

Google

Igor
29.03.2016
19:44:35
у меня вроде в разумных пределах)

Митко Соловец?
29.03.2016
19:45:08
ну явно не стоит 100 объектов загонять в память)
или флушить каждый из них

Igor
29.03.2016
19:45:23
мне все равно их доставать потом
пока точно не буду заморачиваться, но в целом понятно, что так лучше не делать)
интересно, а в монге такого вообще нету? сразу в базу пишется?

Митко Соловец?
29.03.2016
19:57:42
вот
по поводу монги
забыл тебе сказать, что стандартный монго репозитори и приложения
поддерживает гибридные сущности
жпа+монго

Igor
29.03.2016
20:00:54
что-то не могу ничего нагуглить по этому поводу

Митко Соловец?
29.03.2016
20:01:01
не надо гуглить
иди сразу в референс документацию
по этйо части

Igor
29.03.2016
20:01:18
спрингдаты?

Митко Соловец?
29.03.2016
20:01:25
ЙЕС
http://docs.spring.io/spring-data/mongodb/docs/1.2.x/reference/html/mongo.cross.store.html
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
@RelatedDocument
private SurveyInfo surveyInfo;
// getters and setters omitted
}
божественно

Google

Митко Соловец?
29.03.2016
20:03:53
public class SurveyInfo {
private Map<String, String> questionsAndAnswers;
public SurveyInfo() {
this.questionsAndAnswers = new HashMap<String, String?);
}
public SurveyInfo(Map<String, String> questionsAndAnswers) {
this.questionsAndAnswers = questionsAndAnswers;
}
public Map<String, String> getQuestionsAndAnswers() {
return questionsAndAnswers;
}
public void setQuestionsAndAnswers(Map<String, String> questionsAndAnswers) {
this.questionsAndAnswers = questionsAndAnswers;
}
public SurveyInfo addQuestionAndAnswer(String question, String answer) {
this.questionsAndAnswers.put(question, answer);
return this;
}
}
мне кажется это то, что ты ищешь)

Igor
29.03.2016
20:04:10
ага, вижу уже
круто
спасибо :)

Митко Соловец?
29.03.2016
20:04:18
Customer customer = new Customer();
customer.setFirstName("Sven");
customer.setLastName("Olafsen");
SurveyInfo surveyInfo = new SurveyInfo()
.addQuestionAndAnswer("age", "22")
.addQuestionAndAnswer("married", "Yes")
.addQuestionAndAnswer("citizenship", "Norwegian");
customer.setSurveyInfo(surveyInfo);
customerRepository.save(customer);

Igor
29.03.2016
20:04:54
и монгорепозиторий вообще не нужен тогда, как я понимаю?

Митко Соловец?
29.03.2016
20:05:21
ну я так понимаю нет

Igor
29.03.2016
20:05:32
ща протесчу :)

Admin
ERROR: S client not available

Митко Соловец?
29.03.2016
20:05:38
т.к. весь круд у тебя в джейпиэй репе будет

Igor
29.03.2016
20:05:41
ага

Митко Соловец?
29.03.2016
20:05:48
Customer customer = new Customer();
customer.setFirstName("Sven");
customer.setLastName("Olafsen");
SurveyInfo surveyInfo = new SurveyInfo()
.addQuestionAndAnswer("age", "22")
.addQuestionAndAnswer("married", "Yes")
.addQuestionAndAnswer("citizenship", "Norwegian");
customer.setSurveyInfo(surveyInfo);
customerRepository.save(customer);
главное не забудь бин дефинишины для монги
кстати, вот еще вопрос к тебе
помнишь ты про ажур спрашивал?

Igor
29.03.2016
20:06:27
что конкретно?)

Митко Соловец?
29.03.2016
20:06:40
типо как тебе юзать AzurService

Igor
29.03.2016
20:06:44
ага

Google

Митко Соловец?
29.03.2016
20:06:53
ты мог сделать так
@Bean
public AzureService getAzureService() {return new AzureService(); }
а потом
@Autowired
AzureService azureService;
и никаких оберток

Igor
29.03.2016
20:08:07
он только в одном сервисе юзается

Митко Соловец?
29.03.2016
20:08:20
?

Igor
29.03.2016
20:08:21
так что сделал просто приватным и инициализацию в PostConstruct

Митко Соловец?
29.03.2016
20:08:41
пост констракт сервиса?

Igor
29.03.2016
20:08:44
ага

Митко Соловец?
29.03.2016
20:08:45
и никаких аннотаций?

Igor
29.03.2016
20:08:51
да

Митко Соловец?
29.03.2016
20:09:04
ну как вариант кстати

Igor
29.03.2016
20:09:15
private CloudBlobContainer container;
@PostConstruct
private void init() {
try {
CloudStorageAccount account = CloudStorageAccount.parse(CONNECTION_STRING);
CloudBlobClient client = account.createCloudBlobClient();
container = client.getContainerReference(ROOT_FOLDER);
} catch (URISyntaxException | InvalidKeyException | StorageException e) {
e.printStackTrace();
}
}
т.е. вот так
ну контейнер - тот самый объект, который везде нужен

Митко Соловец?
29.03.2016
20:09:43
e.printStackTrace();
?

Igor
29.03.2016
20:09:50
упс)
из тестового проекта переносил

Митко Соловец?
29.03.2016
20:09:59
они обидятся)