Tenho duas tabelas no Banco:
Usuario
Integer usercodigo PK;
...
Blog
Integer blogcodigo PK;
Integer usercodigo FK;
...
Esotu tentando adcionar um novo Blog com o Objeto Usuario (usercodigo) como fk, lendo os exemplos na comunidade nao obtive sucesso.
A outra solucao que tentei foi pegar o usuario da secao e adcionar na coluna usercodigo. Tambem nao consegui adcionar pois nao e aceitavel o cast para usar o getUsercodigo do Bean Usuario.
Blog b = input.getObject(Blog.class);
System.out.println(getUserSession().toString());
b.setUsercodigo(((Usuario)getUserSession()).getUsercodigo());
b.insert(getBeanSession()); // you can also inject the beanSession inside the object and call insert();
setUserSession(b);
addMessage("Seu cadastro foi efetuado com sucesso!");
return CREATED;
}
}
Bean:
public class Blog extends BeanBase{
private Integer blogcodigo;
private String blognome;
private Integer usercodigo;
private Usuario usuario=null;
public Integer getUsercodigo() {
return usercodigo;
}
public void setUsercodigo(Integer usercodigo) {
this.usercodigo = usercodigo;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public Integer getBlogcodigo() {
return blogcodigo;
}
public void setBlogcodigo(Integer blogcodigo) {
this.blogcodigo = blogcodigo;
}
public String getBlognome() {
return blognome;
}
public void setBlognome(String blognome) {
this.blognome = blognome;
}
}
BaseAction:
public class BlogAction extends BaseAction{
private BeanSession getBeanSession() {
return (BeanSession) input.getValue("beanSession");
}
private BlogDAO blogDAO;
// Will be injected...
public void setBlogDAO(BlogDAO blogDAO) {
this.blogDAO = blogDAO;
}
public boolean bypassAuthentication(String innerAction) {
if (innerAction != null && innerAction.equals("add")) return true;
return false;
}
public String add() throws Exception {
if (!isPost()) {
return ERROR;
} else {
Blog b = input.getObject(Blog.class);
System.out.println(getUserSession().toString());
b.setUsercodigo(((Usuario)getUserSession()).getUsercodigo());
b.insert(getBeanSession()); // you can also inject the beanSession inside the object and call insert();
setUserSession(b);
addMessage("Seu cadastro foi efetuado com sucesso!");
return CREATED;
}
}
public String lista() throws Exception {
List<Blog> l = blogDAO.listAll();
output.setValue("blogs", l);
return SUCCESS;
}
}
DAO:
public interface BlogDAO {
public List<Blog> find(Blog b);
public Usuario findByBlogcodigo(String blogcodigo);
public List<Blog> listAll() throws Exception;
}
MetaBean:
package br.com.blogclient.dao.metabean;
import java.sql.Connection;
import java.util.List;
import org.mentawai.bean.BeanSession;
import org.mentawai.bean.jdbc.JdbcBeanSession;
import br.com.blogclient.bean.Blog;
import br.com.blogclient.bean.Usuario;
import br.com.blogclient.dao.BlogDAO;
public class MetaBeanBlogDAO implements BlogDAO{
private BeanSession session;
public void setBeanSession(BeanSession session) {
this.session = session;
}
private Connection getConn() {
if (session instanceof JdbcBeanSession) {
JdbcBeanSession jbs = (JdbcBeanSession) session;
return jbs.getConnection();
}
throw new IllegalStateException("Session is not a JdbcBeanSession: " + (session != null ? session.getClass() : "NULL"));
}
@Override
public List<Blog> find(Blog b) {
// TODO Auto-generated method stub
return null;
}
@Override
public Usuario findByBlogcodigo(String blogcodigo) {
// TODO Auto-generated method stub
return null;
}
public List<Blog> listAll() throws Exception {
return this.session.loadList(new Blog());
}
}
AppManager loadBeans():
public void loadBeans() {
bean(Usuario.class, "Usuario")
.pk("usercodigo", DBTypes.SEQUENCE, "usercodigo")
.field("usernome", DBTypes.STRING)
.field("usersenha", DBTypes.STRING)
.field("useremail", DBTypes.STRING);
bean(Blog.class, "Blog")
.pk("blogcodigo",DBTypes.SEQUENCE)
.field("blognome", DBTypes.STRING)
.field("usercodigo","usercodigo",DBTypes.INTEGER);
Queria mesmo tentar salvar o objeto pois vou precisar no decorrer da aplicação.