Spring boot jpaのフィールド障害問題を使用する
2022-02-27 08:04:25
その理由は、jpaを使ってテーブルを自動作成する際に、TreeMapを使っているので、それをLinkedHashMapの構造にしたいからです。
解決方法 パッケージ名:org.hibernate.cfg、クラス:hibernate.cfgを作成します。プロジェクト下の java フォルダーにパッケージ名:org.hibernate.cfg、クラス:PropertyContainer を作成します(パッケージ名、クラス名は同じにする必要があります)。
package org.hibernate.cfg;
import org.hibernate.AnnotationException;
import org.hibernate.annotations;
import org.hibernate.annotations;
import org.hibernate.annotations;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.common.reflection;
import org.hibernate.annotations.common.reflection;
import org.hibernate.boot.MappingException;
import org.hibernate.boot.jaxb.Origin;
import org.hibernate.boot.jaxb.SourceType;
import org.hibernate.cfg.annotations.HCANNHelper;
import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.util.StringHelper;
import org.jboss.logging.Logger;
import javax.persistence.*;
import java.util.*;
/**
* @Author: 凤凰[小哥哥]
* @Date: 2019/9/20 16:12
* @Email: [email protected]
*/
public class PropertyContainer {
private static final CoreMessageLogger LOG = (CoreMessageLogger) Logger.getMessageLogger(CoreMessageLogger.class, PropertyContainer.class. getName());
private final XClass xClass;
private final XClass entityAtStake;
private final AccessType classLevelAccessType;
private final LinkedHashMap<String, XProperty> persistentAttributeMap;
PropertyContainer(XClass clazz, XClass entityAtStake, AccessType defaultClassLevelAccessType) {
this.xClass = clazz;
this.entityAtStake = entityAtStake;
if (defaultClassLevelAccessType == AccessType.DEFAULT) {
defaultClassLevelAccessType = AccessType.PROPERTY;
}
AccessType localClassLevelAccessType = this.determineLocalClassDefinedAccessStrategy();
assert localClassLevelAccessType ! = null;
this.classLevelAccessType = localClassLevelAccessType ! = AccessType.DEFAULT ? localClassLevelAccessType : defaultClassLevelAccessType;
assert this.classLevelAccessType == AccessType.FIELD || this.classLevelAccessType == AccessType.PROPERTY;
this.persistentAttributeMap = new LinkedHashMap();
List<XProperty> fields = this.xClass.getDeclaredProperties(AccessType.FIELD.getType());
List<XProperty> getters = this.xClass.getDeclaredProperties(AccessType.PROPERTY.getType());
this.preFilter(fields, getters);
Map<String, XProperty> persistentAttributesFromGetters = new HashMap();
this.collectPersistentAttributesUsingLocalAccessType(this.persistentAttributeMap, persistentAttributesFromGetters, fields, getters);
this.collectPersistentAttributesUsingClassLevelAccessType(this.persistentAttributeMap, persistentAttributesFromGetters, fields, getters);
}
private void preFilter(List<XProperty> fields, List<XProperty> getters) {
Iterator propertyIterator = fields.iterator();
XProperty property;
while (propertyIterator.hasNext()) {
property = (XProperty) propertyIterator.next();
if (mustBeSkipped(property)) {
propertyIterator.remove();
}
}
propertyIterator = getters.iterator();
while (propertyIterator.hasNext()) {
property = (XProperty) propertyIterator.next();
if (mustBeSkipped(property)) {
propertyIterator.remove();
}
}
}
private void collectPersistentAttributesUsingLocalAccessType(LinkedHashMap<S
}
persistentAttributeMap.put(name, xProperty);
persistentAttributesFromGetters.put(name, xProperty);
}
}
}
private void collectPersistentAttributesUsingClassLevelAccessType(LinkedHashMap<String, XProperty> persistentAttributeMap, Map< ;String, XProperty> persistentAttributesFromGetters, List<XProperty> fields, List<XProperty> getters) {
Iterator var5;
XProperty getter;
if (this.classLevelAccessType == AccessType.FIELD) {
var5 = fields.iterator();
while (var5.hasNext()) {
getter = (XProperty) var5.next();
if (!persistentAttributeMap.containsKey(getter.getName())) {
persistentAttributeMap.put(getter.getName(), getter);
}
}
} else {
var5 = getters.iterator();
while (var5.hasNext()) {
getter = (XProperty) var5.next();
String name = getter.getName();
XProperty previous = (XProperty) persistentAttributesFromGetters.get(name);
if (previous ! = null) {
throw new MappingException(LOG.ambiguousPropertyMethods(this.xClass.getName(), HCANNHelper.annotatedElementSignature(previous), HCANNHelper.annotatedElementSignature(getter)), new Origin(SourceType.ANNOTATION, this.xClass.getName()));
}
if (!persistentAttributeMap.containsKey(name)) {
persistentAttributeMap.put(getter.getName(), getter);
persistentAttributesFromGetters.put(name, getter);
}
}
}
}
public XClass getEntityAtStake() {
return this.entityAtStake;
}
public XClass getDeclaringClass() {
return this.xClass;
}
public AccessType getClassLevelAccessType() { return this.classLevelAccessType; }
return this.classLevelAccessType;
}
public Collection<XProperty> getProperties() {
this.assertTypesAreResolvable();
return Collections.unmodifiableCollection(this.persistentAttributeMap.values());
}
private void assertTypesAreResolvable() {
Iterator var1 = this.persistentAttributeMap.values().iterator();
XProperty xProperty;
do {
if (!var1.hasNext()) {
return;
}
xProperty = (XProperty) var1.next();
} while (xProperty.isTypeResolved() || discoverTypeWithoutReflection(xProperty));
String msg = "Property " + StringHelper.qualify(this.xClass.getName(), xProperty.getName()) + " has an unbound type and no explicit Resolve this Generic usage issue or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type";
throw new AnnotationException(msg);
}
private AccessType determineLocalClassDefinedAccessStrategy() {
AccessType hibernateDefinedAccessType = AccessType.DEFAULT;
AccessType jpaDefinedAccessType = AccessType.DEFAULT;
AccessType accessType = (org.hibernate.annotations.AccessType) this.xClass.getAnnotation(org.hibernate. annotations.AccessType.class);
if (accessType ! = null) {
hibernateDefinedAccessType = AccessType.getAccessStrategy(accessType.value());
}
Access access = (Access) this.xClass.getAnnotation(Access.class);
if (access ! = null) {
jpaDefinedAccessType = AccessType.getAccessStrategy(access.value());
}
if (
関連
-
unity build when エラー
-
NoClassDefFoundError: org/hamcrest/SelfDescribing JUnit-4.11でエラー。
-
PythonのTypeError: unbound methodの問題を解決する
-
アプリケーションのPagerAdapterがPagerAdapter#notifyDatを呼び出さずにアダプタの内容を変更しました。
-
merge into は、あるテーブルの 1 つの列から別のテーブルの列にデータをコピーします。
-
php_network_getaddresses: getaddrinfo が失敗した 原因
-
javaHow to create array whose elements are type ArrayList?
-
エラーです。関数の戻り値を書き込みコンテキストで使用できません 解決策
-
コレクションが変更されたため、列挙操作が実行できない場合がある
-
laravel: コマンドが見つからない問題の解決
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python reports an error: 'list' object has no attribute 'shape'
-
Pycharm コード ドッカー コンテナ 実行 デバッグ|機械学習シリーズ
-
IOSの致命的なエラー: Optional値のアンラップ中に予期せずnilが検出された
-
Angular.js Unknownプロバイダエラー
-
エラーが発生しました。ルールは1つのリソースソースしか持つことができません(提供されたリソースとテスト+インクルード+エクスクルード)。
-
Scrapy エラー : exceptions.AttributeError: 'HtmlResponse' オブジェクトには 'urljoin' という属性がありません。
-
AttributeError: module tensorflow no attribute app Solution
-
AttributeError: モジュール 'tensorflow' には 'app' という属性がありません。
-
オーバーフィットを克服し、汎化率を向上させるための20のヒントとコツ
-
DjangoでDISTINCTを使用する