Внешний ключ показывает значение null при вставке в таблицу Child, ошибка Невозможно вставить значение NULL в столбец
Вызвано: com.microsoft.sqlserver.jdbc.SQLServerException: не удается вставить значение NULL в столбец «WHITE_LIST_UID», таблицу «ECM3.dbo.WHITE_LIST_MATCHESII»; столбец не допускает нулей. INSERT терпит неудачу.
Я много раз искал свою проблему, и я пробовал все возможные решения, но это не работает. Я пытаюсь вставить в дочернюю таблицу (WhiteListMatches) с помощью родительской таблицы (WhiteList) с отношением oneToMany
, но она показывает предыдущую ошибку!
WhiteList.java (родительский)
- Как читать sql-запрос из txt-файла в Java
- QueryDSL DateTime форматирование поля
- Отображение hibernate datetimeoffset
- Проблема с использованием Hibernate и SQL Server 2008
- PreparedStatement успешно работает в oracle, но исключает исключение в Microsoft SQL
import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name = "WHITE_LISTII") public class WhiteList implements Serializable { @Id @Column(name = "WHITE_LIST_UID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer whiteListUid; @Basic(optional = false) @Column(name = "ENTITY_NAME") private String entityName; @OneToMany(cascade = CascadeType.ALL,mappedBy = "whiteList") private List<WhiteListMatches> matches = new ArrayList<>(); public WhiteList() { } public WhiteList(Integer whiteListUid) { this.whiteListUid = whiteListUid; } public WhiteList(Integer whiteListUid, String entityName) { this.whiteListUid = whiteListUid; this.entityName = entityName; } public Integer getWhiteListUid() { return whiteListUid; } public void setWhiteListUid(Integer whiteListUid) { this.whiteListUid = whiteListUid; } public String getEntityName() { return entityName; } public void setEntityName(String entityName) { this.entityName = entityName; } public List<WhiteListMatches> getMatches() { return matches; } public void setMatches(List<WhiteListMatches> matches) { this.matches = matches; } @Override public int hashCode() { int hash = 0; hash += (whiteListUid != null ? whiteListUid.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof WhiteList)) { return false; } WhiteList other = (WhiteList) object; if ((this.whiteListUid == null && other.whiteListUid != null) || (this.whiteListUid != null && !this.whiteListUid.equals(other.whiteListUid))) { return false; } return true; } @Override public String toString() { return "com.model.datagear.entity.WhiteList[ whiteListUid=" + whiteListUid + " ]"; } }
WhiteListMatches.java (ребенок)
import java.io.Serializable; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name = "WHITE_LIST_MATCHESII") public class WhiteListMatches implements Serializable { @Id @Column(name = "ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "MATCH_ENTITY_NAME") private String matchEntityName; @Column(name = "MATCH_ENTITY_ADDRESS") private String matchEntityAddress; @Column(name = "MATCH_ENTITY_YEAR_OF_BIRTH") private String matchEntityYearOfBirth; @Column(name = "MATCH_ENTITY_DATE_OF_BIRTH") private String matchEntityDateOfBirth; @Column(name = "MATCH_ENTITY_PLACE_OF_BIRTH") private String matchEntityPlaceOfBirth; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "WHITE_LIST_UID", nullable = false) private WhiteList whiteList; public WhiteListMatches() { } public WhiteListMatches(Integer id) { this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getMatchEntityName() { return matchEntityName; } public void setMatchEntityName(String matchEntityName) { this.matchEntityName = matchEntityName; } public String getMatchEntityAddress() { return matchEntityAddress; } public void setMatchEntityAddress(String matchEntityAddress) { this.matchEntityAddress = matchEntityAddress; } public String getMatchEntityYearOfBirth() { return matchEntityYearOfBirth; } public void setMatchEntityYearOfBirth(String matchEntityYearOfBirth) { this.matchEntityYearOfBirth = matchEntityYearOfBirth; } public String getMatchEntityDateOfBirth() { return matchEntityDateOfBirth; } public void setMatchEntityDateOfBirth(String matchEntityDateOfBirth) { this.matchEntityDateOfBirth = matchEntityDateOfBirth; } public String getMatchEntityPlaceOfBirth() { return matchEntityPlaceOfBirth; } public void setMatchEntityPlaceOfBirth(String matchEntityPlaceOfBirth) { this.matchEntityPlaceOfBirth = matchEntityPlaceOfBirth; } public WhiteList getWhiteList() { return whiteList; } public void setWhiteList(WhiteList whiteList) { this.whiteList = whiteList; } @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof WhiteListMatches)) { return false; } WhiteListMatches other = (WhiteListMatches) object; if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { return false; } return true; } @Override public String toString() { return "com.model.datagear.entity.WhiteListMatches[ id=" + id + " ]"; } }
вставить метод
public void inertIntoWhiteList(String entityName, Set<Party> parties) { Transaction tx = null; List<WhiteListMatches> matches = new ArrayList<>(); Iterator it = parties.iterator(); while (it.hasNext()) { Party p = (Party) it.next(); WhiteListMatches w = createWhiteListMatch(p); matches.add(w); } try { hibernateSession = getSession(); tx = hibernateSession.beginTransaction(); WhiteList whiteListEntity = new WhiteList(); whiteListEntity.setEntityName(entityName); for (WhiteListMatches wl : matches) { whiteListEntity.getMatches().add(wl); } hibernateSession.save(whiteListEntity); } catch (Exception ex) { ex.printStackTrace(); } finally { tx.commit(); hibernateSession.close(); } }
WhitListMatche
инициализируется из Set<Party>
помощью вспомогательного метода createWhitListMatch
если кто-то задается вопросом, откуда этот список получил свои данные. Все мои ПК тоже являются идентификаторами в БД.
private WhiteListMatches createWhiteListMatch(Party party) { WhiteListMatches whiteListMatch = new WhiteListMatches(); whiteListMatch.setMatchEntityAddress(party.getADDRESS()); if (party.getX_BIRTH_DT() != null) { whiteListMatch.setMatchEntityDateOfBirth(party.getX_BIRTH_DT().toString()); } whiteListMatch.setMatchEntityName(party.getENTITY_NAME()); whiteListMatch.setMatchEntityPlaceOfBirth(party.getPLACE_OF_BIRTH()); whiteListMatch.setMatchEntityYearOfBirth("" + party.getX_YEAR_OF_BIRTH()); return whiteListMatch; }
- Создать имя таблицы пользователя с помощью спящего режима
- Каков наилучший способ обновить одну запись через SQL и получить идентификатор обновленной записи? (Java / MSSQL)
- производительность уменьшается после записи 45 тыс. при перезаписи файла excel (.xlsm) из набора результатов Java
- В чем разница между форматом даты JAVA «dd / MM / yyyy» и «dd / mm / yyyy»?
- Вызов хранимой процедуры с указанными параметрами JDBC вызывает исключение
- Экспорт больших данных в CSV из sqlserver с помощью java
- как получить дату timestamp как UTC
- Как конвертировать SQL-запрос с подзапросом и рассчитывать на построитель критериев JPA
Hibernate не делает дополнительной работы для вас. Поэтому, если у вас есть WhiteListMatches
с whiteList == null
Hibernate сохраняет этот null
в базе данных.
Вы можете сделать что-то вроде этого:
for (WhiteListMatches wl : matches) { wl.setWhiteList(whiteListEntity); whiteListEntity.getMatches().add(wl); }
Также общепринятой практикой является такой метод в WhiteList
public void addMatches(List<WhiteListMatches> matches) { for (WhiteListMatches wl : matches) { wl.setWhiteList(this); this.matches.add(wl); } }