Моя рекомендация состоит в том, чтобы придумать некоторые простые программы и записать им, начать заканчиваться, с помощью VI.
, Разногласия, Вы будете слишком расстроены сначала кривой обучения, чтобы вынудить себя использовать их на работе или в любой чувствительной ко времени среде.
я сделал это прежде, чтобы познакомиться со средами/редакторами, и это работает вполне прилично.
, Если у Вас есть проблемы, придумывающие вещи записать, я рекомендую восстановить проекты, которые Вы сделали в школе (или что-либо еще, что Вы сделали ранее). Этот метод имеет добавленную премию разрешения Вам видеть, каким количеством из лучшего разработчика Вы стали.:)
Редактирование: забыл упоминать, что необходимо сделать это полностью от консоли для предотвращения любого искушения использовать мышь!
Я обычно использую метод getReference , когда мне не нужен доступ к состоянию базы данных (я имею в виду метод получения). Просто чтобы изменить состояние (я имею в виду метод установки). Как вы должны знать, getReference возвращает прокси-объект, который использует мощную функцию, называемую автоматической грязной проверкой. Предположим, что следующий
public class Person {
private String name;
private Integer age;
}
public class PersonServiceImpl implements PersonService {
public void changeAge(Integer personId, Integer newAge) {
Person person = em.getReference(Person.class, personId);
// person is a proxy
person.setAge(newAge);
}
}
Если я вызываю метод find , провайдер JPA за кулисами вызовет
SELECT NAME, AGE FROM PERSON WHERE PERSON_ID = ?
UPDATE PERSON SET AGE = ? WHERE PERSON_ID = ?
Если я вызову метод getReference , провайдер JPA за кулисами будет call
UPDATE PERSON SET AGE = ? WHERE PERSON_ID = ?
И знаете почему ???
Когда вы вызываете getReference, вы получаете прокси-объект. Что-то вроде этого (провайдер JPA заботится о реализации этого прокси)
public class PersonProxy {
// JPA provider sets up this field when you call getReference
private Integer personId;
private String query = "UPDATE PERSON SET ";
private boolean stateChanged = false;
public void setAge(Integer newAge) {
stateChanged = true;
query += query + "AGE = " + newAge;
}
}
Итак, перед фиксацией транзакции провайдер JPA увидит флаг stateChanged, чтобы обновить ИЛИ НЕ лицо. Если после оператора обновления не обновляется ни одна строка,