2016-10-30 2 views
0

私はSpring MVCの新機能ですが、そのメソッドとその参照方法を理解しようとしています。私がフォローしているビデオチュートリアルコースがあります。session.get()はフィールド、引数を解決することができません

私はクラスを通してモデルを実装しようとしています。

ProductDaoImpl.java

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Repository; 

import java.util.List; 

@Repository 
public class ProductDaoImpl implements ProductDao { 

    @Autowired 
    private SessionFactory sessionFactory; 

    @Override 
    public void addProduct(Product product) { 
     Session session = sessionFactory.getCurrentSession(); 
     session.saveOrUpdate(product); 
     session.flush(); 
    } 

    @Override 
    public Product getProductById(String id) { 
     Session session = sessionFactory.getCurrentSession(); 
     Product product = (Product) session.get(Product.class.productId); 
         // unable to resolve the productId on get() 
     return product; 
    } 

    @Override 
    public List<Product> getAllProducts() { 
     return null; 
    } 

    @Override 
    public void deleteProduct(String id) { 

    } 
} 

ProductDao.java

import java.util.List; 

public interface ProductDao { 
    void addProduct(Product product); 
    Product getProductById(String id); 
    List<Product> getAllProducts(); 
    void deleteProduct(String id); 
} 

Product.javaモデル

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 


@Entity 
public class Product { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) //tells the system that when an instance is put to database, it will be numbered automatically starting from 1 
    private String productName; 
    private String productCategory; 
    private String productDescription; 
    private double productPrice; 
    private String productDimension; 
    private String productStatus; 
    private int unitInStock; 
    private String productManufacturer; 
    private String productId; 
} 

は、しかし、それは

@Override 
     public Product getProductById(String id) { 
      Session session = sessionFactory.getCurrentSession(); 
      Product product = (Product) session.get(Product.class.productId); 
      return product; 
     } 

PRODUCTID引数はProduct.classのフィールドにアクセスすることができget()方法であり、解決することができませんでしですか? それは私はあなたが役立つことを願っproductId

を解決できない理由を私は理解していないProduct.class.fieldHere?

にフィールドを求めています。

ありがとうございました。

+0

Springでは、DAOをSpring Dataによって完全に自動生成できることに注意してください。インターフェイスを宣言するだけで、DAOロジックが構築されます。 – chrylis

答えて

1

表現Product.class.productIdで、2つのパラメータを受け付けます。 Product.classは、クラスリテラルです。つまり、Productクラスのインスタンスであるjava.lang.Classを表す定数です。 ClassにはproductIdフィールドはありません。

さらに、このメソッドにはthe Javadocと表示されます。Classオブジェクト(取得したものをどのようなものにするか)とIDの2つのパラメータが必要です。したがって、あなたの呼び出しはsession.get(Product.class, id)でなければなりません。また、Hibernate 5を使用している場合は、Productにキャストする必要はありません。

しかし、HibernateをターゲットとするDAOを手渡しするのではなく、JPA(一般的なAPI、キャストの必要性を排除するなどの利点を提供する)とSpring Data(これを自動生成する空のインターフェイス宣言だけであなたのためのDAO全体)。また、複雑なトピックも扱っていますが、ORMのようなものに取り組む前に、コアJavaを学ぶための演習をうまくやることができます。

+0

情報ありがとうございます。私は過去にクラスリテラルを使用していませんでした。私は読んでいる本でそれをチェックしていないと思います。私は助けに感謝します。 – p3ace

1
session.get(Product.class.productId); 

これは有効なJavaコードではありません。 get()は、エンティティクラスと取得するエンティティのIDの2つの引数を必要とします。 Javaの引数はコンマで区切られています。

session.get(Product.class, productId); 

ただし、変数はproductIdという名前でもありません。これはidという名前です。したがって、コードは

session.get(Product.class, id); 

である必要があります。これはJavaの初心者です。複雑なものであるSpringとHibernateを使用する前に、より簡単なJavaの演習で練習することを強くお勧めします。

+0

基本的なJavaのアドバイスを最初に加えてください。 – chrylis

+1

@JB Nizetアドバイスをいただきありがとうございます。私はそれに注意する。私は本当に興味があったので、実際に勉強に飛びついたのですが、私が慣れ親しんでいなければならない小さな事柄についてもっと詳しくお読みになると思います。答えをありがとう。 – p3ace

1

session.getは、1つのエンティティのクラスであり、もう一つは、Javaで意味をなさない識別子

Product product = (Product) session.get(Product.class,id); 
+0

ありがとうございました。 – p3ace

関連する問題