2017-10-31 8 views
0

がロードされていない私は、MySQLのテーブルを持っている:デフォルト値は

mysql> show create table items\G 
*************************** 1. row *************************** 
     Table: items 
Create Table: CREATE TABLE `items` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 
    `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 
1 row in set (0.02 sec) 

私は、Entityクラスを経由してJavaプログラムからの新しい行を作成:

@Entity 
@Table(name = "items", schema = "office_db") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "Items.findAll", query = "SELECT i FROM Items i"), 
    @NamedQuery(name = "Items.findById", query = "SELECT i FROM Items i WHERE i.id = :id"), 
    @NamedQuery(name = "Items.findByName", query = "SELECT i FROM Items i WHERE i.name = :name"), 
    @NamedQuery(name = "Items.findByCreated", query = "SELECT i FROM Items i WHERE i.created = :created") 
}) 
public class Items implements Serializable { 

    @Column(name = "name",length = 128) 
    private String name; 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    @Basic(optional = false) 
    @Column(name = "created") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date created; 
    @OneToMany(mappedBy = "itemId") 
    private Collection<Documents> documentsCollection; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "items") 
    private Collection<ItemAttributes> itemAttributesCollection; 
    (more stuff ...) 

を私が唯一の設定NAME列、および予想、IDとCREATEDがデフォルトで設定されているような:

mysql> select * from items; 
+----+--------+---------------------+ 
| id | name | created    | 
+----+--------+---------------------+ 
| 2 | Case 2 | 2017-10-31 13:47:52 | 
| 3 | Case 3 | 2017-10-31 13:48:02 | 
+----+--------+---------------------+ 
2 rows in set (0.00 sec) 

しかし、私は後ででJavaにテーブルを再ロードするとき同じセッション:

public List<Items>findItems(){ 
    TypedQuery<Items> query= 
      em.createNamedQuery("Items.findAll",Items.class); 

    return query.getResultList(); 
} 

ID列が正しくセットされているが、作成した列が空白としてアップしています。私がアプリケーションを再起動すると、CREATEDが正しく表示されます(これはglassfishサーバー上で実行されます)。私の推測では、この違いの理由はIDの@GeneratedValueアノテーションですが、CREATEDフィールドには適用できません。生成されたタイムスタンプの読み込みを行う正しい方法は何ですか?

+0

オブジェクトを永続化したとき、どのSQL INSERT文が呼び出されましたか?クエリを実行すると、オブジェクトはどこから取得されますか?データストアから?またはL1/L2キャッシュから?ログを見てください – DN1

+0

私はログ(このドメインのserver.log)には表示されません - 私はコード内に何が起こっているかをトレースするINFOログ出力があります。 Glasshfishの設定を調べて、SQLとそれを見ることができるかどうかを調べる必要があります。その方向のポインターは高く評価されます。 – j4nd3r53n

+0

あなたが選んだJPAプロバイダはどんなものなので、ログがどこにあるのかそのドキュメントを見てください。 – DN1

答えて

0

em.refresh()Invalidating JPA EntityManager sessionに電話します。これはHibernate用ですが、EclipseLinkでは同じようです。私は例外で、私の場合は実行されますが、私は別の質問にそれを掲示します。

関連する問題