Ich werde es in meiner Freizeit hinzufügen
ProductForm.java
public class ProductForm {
//Eigene Klasse
public ProductDto productDto;
}
Der folgende Fehler kann auftreten.
[InvalidPropertyException: Invalid property ◯◯ of bean class [△△Form]: Illegal attempt to get property '◯◯' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property '◯◯' of bean class [△△Form]: Could not instantiate property type [□□] to auto-grow nested property path: org.springframework.beans.BeanInstantiationException: Failed to instantiate [□□]: Is it an abstract class?; nested exception is java.lang.InstantiationException: □□]
Es scheint zu passieren, wenn Sie einen Konstruktor mit Argumenten erstellen, ohne einen Konstruktor ohne Argumente zu erstellen. Ich habe einen leeren Konstruktor erstellt und er wurde behoben.
ProductDto.java
public ProductDto() {
//nichts tun
}
public ProductDto(Product product) {
this.price = product.price + "Kreis";
}
//Alle Fälle
List<Product> products = Product.find.all();
//Holen Sie sich in Liste
List<Product> products = Product.find.where().eq("valid_flg", 1).findList();
//Holen Sie sich im Paging-Format findPagedList(Seitennummer,Anzahl der Seiten pro Seite)
PagedList<Product> products = Product.find.findPagedList(1, 20);
//Holen Sie sich mit Primärschlüssel
Product product = Product.find.byId(1L);
//Holen Sie sich die Nummer
int count = Product.find.findRowCount();
//Erwerben Sie nur eine (* Ein Fehler tritt auf, wenn zwei oder mehr zutreffende Daten vorhanden sind)
Product product = Product.find.where().eq("product_code", "123456789").findUnique();
Verwenden Sie "setDistinct (true)".
List<Product> products = Product.find.select("category").setDistinct(true).findList();
// select distinct category from m_product;
Product.find.where().eq("Bedingung A.")
.disjunction()
.add(Expr.eq("Bedingung B."))
.add(Expr.ilike("Bedingung C."))
.findList();
In der Modellklasse definiert. Das folgende Beispiel zeigt die Zuordnung der Tabelle m_product und der Tabelle m_season zu N: 1.
※ N:1 Ein Datensatz für eine bestimmte Saison entspricht immer einem Datensatz für ein Produkt. Ein Produkt ist nicht an mehrere Jahreszeiten gebunden. Für einen bestimmten Rekord der ersten Staffel sind mehrere Produkte mit dieser Staffel verbunden. Daher ist die Beziehung von "Produkt: Saison" "N: 1". Erläutern Sie die Beziehung von "Eins-zu-Eins", "Eins-zu-Viele" und "Viele-zu-Viele" auf leicht verständliche Weise
models/Product.java
@ManyToOne
@JoinColumn(name = "season_id", insertable = false, updatable = false)
public Season season;
Definieren Sie "@ ManyToOne" für diejenige, die zu N wird. Definieren Sie dann den externen Schlüssel für den Namen "@ JoinColumn".
models/Season.java
@OneToMany(mappedBy = "season")
public List<Product> productList;
Definieren Sie "OneToMany" für diejenige, die 1 wird. mappedBy
entspricht dem Variablennamen des durch @ ManyToOne
definierten Feldes.
Join Die Join-SQL wird erstellt, indem der Variablenname der oben definierten Beziehung an die Methode "fetch" übergeben wird.
controllers/ProductListController
List<Product> products = Product.find
.fetch("season")
.findList();
// select * from m_product t0 left outer join m_season t1 on t1.id = t0.season_id;
@OneToOne
@ OneToMany
und @ ManyToOne
werden verzögert geladen, es sei denn, Sie schreiben explizit Fetch, aber für Eins-zu-Eins-Beziehungen sind sie standardmäßig EAGER-Ladevorgänge.
python
Product p = Product.find.byId(1);
// select * fron m_product t0 left outer join m_product_detail t1 on t0.product_id = t1.id where t1.id = 1;
//Wenn die folgenden Beziehungen mit dem Produktmodell verknüpft sind
// @OneToOne(mappedBy = "productDetail")
// public ProductDetail productDetail;
Verbunden, obwohl Fetch nicht geschrieben ist. Wenn Sie nicht beitreten möchten, geben Sie explizit das verzögerte Laden an.
models/Product.java
@OneToOne(mappedBy = "productDetail", fetch = FetchType.LAZY)
public ProductDetail productDetail;
Die Seriennummern werden standardmäßig in der Reihenfolge ihres Auftretens als t0, t1, t2 ... vergeben. Sie können einen beliebigen Alias mit "Query # alias" festlegen. Die Join-Zieltabelle kann nicht mit "Query # alias" verwendet werden.
controllers/ProductListController
List<Product> products = Product.find
.query()
.alias("pro")
.fetch("season")
.findList();
// select * from m_product pro left outer join m_season t1 on t1.id = pro.season_id;
Wenn das Beziehungsziel eine Spalte mit demselben Namen enthält, geben Sie einen Alias an, um das Verständnis zu erleichtern.
controllers/ProductListController
List<Product> products = Product.find
.query()
.alias("pro")
.orderBy("pro.valid_flg desc, pro.updated_at desc")
.fetch("season")
.findList();
// select * from m_product pro left outer join m_season t1 on t1.id = pro.season_id order by pro.valid_flg desc, pro.updated_at desc;
SampleController.java
session().get("hoge");
session ()
ist eine Methode der play.mvc.Controller
-Klasse. Wenn Sie also von einem anderen als dem Controller aufrufen, ist dies wie folgt.
Http.Context.current().session().get("hoge");
Rufen Sie den ursprünglich in application.conf definierten Wert von Java ab.
conf/application.conf
MAIL_ADDRESS = "[email protected]"
Sample.java
import com.typesafe.config.ConfigFactory;
String mailAddress = ConfigFactory.load().getString("MAIL_ADDRESS");
Sie können unter conf eine weitere Datei erstellen und den Dateinamen angeben.
conf/sample.conf
MAIL_ADDRESS = "[email protected]"
Sample.java
import com.typesafe.config.ConfigFactory;
String mailAddress = ConfigFactory.load(ConfigFactory.parseFileAnySyntax(new File("conf/sample.conf"))).getString("MAIL_ADDRESS");
Kann durch Abhängigkeitsinjektion vom Controller aufgerufen werden
Application.conf
wird verwendet.SampleController.java
import Play.Configuration
@Inject Configuration configuration
String mailAddress = configuration.getString("MAIL_ADDRESS");
Standardmäßig wird beim Start application.conf
geladen.
Durch Angabe der Startoption können Sie die zu lesende Einstellungsdatei ändern.
activator -Dconfig.file=conf/application_local.conf run
Wenn die in der Option angegebene Datei nicht gefunden wird, wird application.conf
fehlerfrei gelesen.
In der Produktionsumgebung wird "Aktivatorstart" anstelle von "Aktivatorlauf" verwendet, daher ist es erforderlich, dem Schreibstil eine Gewohnheit hinzuzufügen.
activator "start 9000 -Dconfig.file=conf/application_prod.conf" -Dapplication.secret="xxxxxxxx"
activator -jvm-debug 9999 run
Klicken Sie beim Starten des Servers mit der rechten Maustaste auf den Projektordner in Eclipse Wählen Sie "Debug" → "Debug Configuration". Wählen Sie "Remote Java Application" aus dem Menü auf der linken Seite und wählen Sie Geben Sie "localhost" für den Host und "9999" für den Port ein und drücken Sie Debug.
Dies stoppt am Haltepunkt.
Wenn Sie allen Routen ein gemeinsames Präfix hinzufügen möchten, legen Sie es in der application.conf fest.
conf/application.conf
application.context = "/admin"
localhost: 9000 / admin ist der Stamm.
Recommended Posts